目录
mask--掩码/掩膜操作(8位单通道图像,灰度图或者二值图)
感兴趣区域ROI
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void main()
{
Mat img = imread("1.jpg");
Mat imgROI1 = img(Rect(20, 20, 200, 200));//Rect 起点坐标,宽,高
Mat imgROI2 = img(Range(20, 220), Range(20, 220));//Range 行列范围,效果同上
//ROI图像融合
Mat logo = imread("logo.jpg");
Mat imgROI3 = img(Rect(20, 20, logo.cols, logo.rows));
logo.copyTo(imgROI3);
imshow("img", img);
waitKey(0);
}
注意:
- 一般为矩形区域
- 能够确定分析重点,减少处理时间,增加精度
- 定义方法:使用Rect表示矩形区域或用Range设定行列范围
mask--掩码/掩膜操作(8位单通道图像,灰度图或者二值图)
自述:我觉得mask的作用就是确定起作用的位置区域
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void main()
{
Mat img = imread("1.jpg");
Mat logo = imread("lena.jpg");
Mat mask = imread("mask.jpg", 0);
//Mat mask = Mat::zeros(logo.size(),CV_8UC1);//先创建一个纯黑的图像,单通道的图像
//circle(mask, Point(mask.rows/2,mask.cols/2),100,Scalar(255),-1,8);//画一个填充的白色圆
//imwrite("mask.jpg", mask);
Mat imgROI = img(Rect(20, 20, logo.cols, logo.rows));//Rect 起点坐标,宽,高
logo.copyTo(imgROI, mask);//mask划定作用范围
imshow("dst",img);
waitKey(0);
}
注意:
- 掩码某个位置如果为0(黑色),则在此位置上的操作不起作用
- 掩码某个位置如果不为0(不是黑色),则在此位置上的操作会起作用
- 可以用来提取不规则ROI---高级图像融合
高级图像融合
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("1.jpg");
Mat logo = imread("logo.jpg");
if (logo.empty())
{
cout << "can not !"<< endl;
return -1;
}
//高级图像融合,效果不太好
Mat mask = imread("logo.jpg", 0);
bitwise_not(mask, mask);
threshold(mask,mask,80,255,THRESH_BINARY);
//Mat mask = Mat::zeros(logo.size(),CV_8UC1);//先创建一个纯黑的图像,单通道的图像
//circle(mask, Point(mask.rows/2,mask.cols/2),100,Scalar(255),-1,8);//画一个填充的白色圆
//imwrite("mask.jpg", mask);
Mat imgROI = img(Rect(20, 20, logo.cols, logo.rows));//Rect 起点坐标,宽,高
logo.copyTo(imgROI, mask);
imshow("dst", img);
waitKey(0);
return 0;
}