- **C++:**voidMat::copyTo(OutputArray **m**)const
- **C++:**voidMat::copyTo(OutputArray **m**, InputArray **mask**)const
- 这个函数可以复制图像到另一个图像或矩阵上,可选参数是掩码
- 由于叠加的图像大小不一定相等,比如我们这里把一张小照片加到一张大照片上
- 我们可以在大照片上设置一个和小照片一样大的感兴趣区域
- 不使用掩码的时候,我们载入一张png,和一张jpg
#include <opencv2/highgui/highgui.hpp>#include <opencv2/core/core.hpp>int main(){ cv::Mat image = cv::imread("E:/Image/Fruits.jpg"); cv::Mat logo = cv::imread("E:/logo.png"); cv::Mat imageROI; imageROI = image(cv::Rect(10,10,logo.cols,logo.rows)); logo.copyTo(imageROI); cv::namedWindow("result"); cv::imshow("result",image); cv::waitKey(); return 0;}
- 原先在png里面是透明的地方,现在成了黑色,可见原来是透明的地方被认为是值0。
- 我们使用掩码来看看效果,掩码就使用png图片,掩码只能是一个通道的,我们载入灰度图像作为掩码
#include <opencv2/highgui/highgui.hpp>#include <opencv2/core/core.hpp>int main(){ cv::Mat image = cv::imread("E:/Image/Fruits.jpg"); cv::Mat logo = cv::imread("E:/logo.png"); cv::Mat mask = cv::imread("E:/logo.png",0); cv::Mat imageROI; imageROI = image(cv::Rect(10,10,logo.cols,logo.rows)); logo.copyTo(imageROI,mask); cv::namedWindow("result"); cv::imshow("result",image); cv::waitKey(); return 0;}
- 这样能看出差别了吧。
- 再来看看另一个函数
- **C++:**voidaddWeighted(InputArray **src1**, double **alpha**, InputArray **src2**, double **beta**, double **gamma**, OutputArray **dst**, int **dtype**=-1)
- 转换成数学表达式就是
#include <opencv2/highgui/highgui.hpp>#include <opencv2/core/core.hpp>int main(){ cv::Mat image = cv::imread("E:/Image/Fruits.jpg"); cv::Mat logo = cv::imread("E:/logo.png"); cv::Mat imageROI; imageROI = image(cv::Rect(10,10,logo.cols,logo.rows)); cv::addWeighted(imageROI, 1.0, logo, 0.3, 0, imageROI); cv::namedWindow("result"); cv::imshow("result",image); cv::waitKey(); return 0;}
原文链接: https://www.cnblogs.com/xianglan/archive/2011/07/30/2122186.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/29570
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!