opencv之ROI与mask掩码

一、ROI

#include<opencv2/opencv.hpp>
using namespace cv;

void main(){
    Mat img=imread("E://0.jpg");
    Mat logo=imread("E://opencv.jpg");
    Mat ROI=img(Rect(20,20,logo.cols,logo.rows));//x,y,w,h    xy坐标,宽度,高度
    //Mat ROI=img(Range(20,20+logo.rows),Range(20,20+logo.cols));//纵坐标范围,行坐标范围
    logo.copyTo(ROI);//logo复制到ROI上面
    
    imshow("img",img);
    waitKey(0);
}

低级融合

二、mask掩码

图像高级融合

#include<opencv2/opencv.hpp>
using namespace cv;

void main(){
    Mat img=imread("E://0.jpg");
    Mat logo=imread("E://opencv.jpg");
    Mat mask=imread("E://opencv.jpg",0);//以灰度图的形式读入
    bitwise_not(mask, mask);//图像取反,白色背景变黑
    imshow("mask",mask);
    threshold(mask, mask, 50, 255, THRESH_BINARY);//二值化,50这个取值是经过调试后选择的,若取值为100则左下角的标志会消失
    imshow("threshold", mask);

    Mat ROI=img(Rect(20,20,logo.cols,logo.rows));//x,y,w,h    xy坐标,宽度,高度
    logo.copyTo(ROI,mask);//logo复制到ROI上面
    
    imshow("img",img);
    waitKey(0);
}

#include<opencv2/opencv.hpp>
using namespace cv;

void main(){
    Mat img1=imread("E://3.jpg");
    Mat img2=imread("E://4.jpg");
    Mat mask=Mat::zeros(img1.size(),CV_8SC1);//纯黑
    circle(mask,Point(mask.cols/2,mask.rows/2),100,Scalar(100),-1,8);
    Mat dst;
    add(img1,img2,dst,mask);
    imshow("result",dst);
    waitKey(0);
}

 

cv::threshold

函数

对输入单通道矩阵逐像素进行固定阈值分割。典型应用是从灰度图像获取二值图像,或消除灰度值过大或过小的噪声。有5种阈值分割类型,由参数thresholdType决定。

double threshold(InputArray src, OutputArray dst,double thresh, double maxVal, int thresholdType)

参数

src - 输入矩阵对矩阵src中的每个元素应用固定阈值分割

dst - 输出矩阵

thresh - 阈值

maxVal - 设置的最大值

thresholdType - 阈值类型

阈值类型

 

THRESH_BINARY:过门限的值设置为maxVal,其它值置零

 

THRESH_BINARY_INV:过门限的值置零,其它值设置为maxVal

THRESH_TRUNC:过门限的值设置为门限值,其它值置不变

THRESH_TOZERO:过门限的值不变,其它值置零

THRESH_TOZERO_INV:过门限的值置零,其它值不变

 

转自:https://www.cnblogs.com/little-monkey/p/7207766.html

 

posted @ 2018-12-28 22:02  AI_ON  阅读(534)  评论(0)    收藏  举报