OpenCV 在图像感兴趣区域(ROI)叠加透明Logo图像
#include<opencv2/opencv.hpp>
using namespace cv;
int main() {
Mat srcImage = imread("src.jpg");
Mat logoImage = imread("logo.png");
Mat logoImageGray;
cvtColor(logoImage, logoImageGray,COLOR_BGR2GRAY);
threshold(logoImageGray, logoImageGray, 180, 255, cv::THRESH_BINARY);
cv::Mat mask = 255 - logoImageGray; //掩模反色
cv::Mat imROI;
imROI = srcImage(cv::Rect(srcImage.cols / 2, 0, logoImage.cols, logoImage.rows));
logoImage.copyTo(imROI, mask);
imwrite("result.jpg", srcImage);
return 0;
}
[ Opencv copyTo ]
image.copyTo(imageROI),作用是把image的内容粘贴到imageROI;
image.copyTo(imageROI,mask),作用是把mask和image重叠以后把mask中像素值为0(black)的点对应的image中的点变为透明,而保留其他点。
mask:即掩模。掩模是由0和1组成的一个二进制图像。当在某一功能中应用掩模时,1值区域被处理,被屏蔽的0值区域不被包括在计算中。通过指定的数据值、数据范围、有限或无限值、感兴趣区和注释文件来定义图像掩模,也可以应用上述选项的任意组合作为输入来建立掩模。
上一篇:
IDEA上Java项目控制台中文乱码
