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

浙公网安备 33010602011771号