孤独的猫

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Mat对象的简单算术运算

 1 Mat src1 = imread("F:/opencv4.1.0/sources/samples/data/WindowsLogo.jpg");
 2 Mat src2 = imread("F:/opencv4.1.0/sources/samples/data/LinuxLogo.jpg");
 3 if (src1.empty() || src2.empty()) {
 4     printf("could not find image");
 5     return -1;
 6 }
 7 
 8 imshow("input1", src1);
 9 imshow("input2", src2);
10 Mat dst1;
11 add(src1, src2,dst1);
12 imshow("add-demo", dst1);
13 
14 Mat dst2;
15 subtract(src1, src2, dst2);
16 imshow("subtract-demo", dst2);
17 
18 Mat dst3;
19 multiply(src1, src2, dst3);
20 imshow("multiply-demo", dst3);
21 
22 Mat dst4;
23 divide(src1, src2, dst4);
24 imshow("divide-demo", dst4);

Mat对象的加权函数addWidget

线性混合就是指两个图片或两段视频以某种函数关系叠加呈现。

                                                          

addWeighted原函数:

void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1);

第一个参数:要叠加的第一个图像Mat

第二个参数:标识第一个参数叠加的权重

第三个参数:表示第二个叠加的图像,他需要和第一个数组拥有同样的尺寸和通道数

第四个参数:表示第二个叠加图像的权重

第五个参数:输出参数,需要和前两个图像拥有同样的通道数和尺寸

第六个参数:一个加到权重总和上的标量值(填0就好)

第七个参数:输出阵列的深度有默认值-1, 当两张叠加图片深度相同时,参数为-1

如函数:

 1 void mixImages() {
 2     Mat image = imread("images/alpha.png");
 3     Mat logo0 = imread("images/logo.png");
 4     Mat logo;
 5     // 缩小logo
 6     resize(logo0, logo, Size(0.5 * logo0.cols, 0.5 * logo0.rows));
 7 
 8     Mat imageROI;
 9     //在image mat中取出要打上logo的位置进行融合
10     //方法1
11     //imageROI = image(Rect(10, 20, logo.cols, logo.rows));
12     //方法2
13     imageROI = image(Range(10, 10 + logo.rows), Range(20, 20 + logo.cols));
14     addWeighted(imageROI, 0.5, logo, 0.3, 0., imageROI);
15 
16     imshow("融合", image);
17     //compression_params 为存些图片的参数
18     vector<int> compression_params;
19     compression_params.push_back(IMWRITE_PNG_COMPRESSION);
20     compression_params.push_back(9);    //png格式下,默认的参数为3.
21     try {
22         // cv 创建的窗口无法显示透明,所以会发现显示的是jpg的图片,保存后用 window图片查看器看图就会有透明显示
23         imwrite("addlog.jpg", image, compression_params);
24         imwrite("addlog.png", image, compression_params);
25     }
26     catch (runtime_error& ex) {
27         fprintf(stderr, "save image erro %s\n", ex.what());
28         return;
29 
30     }
31 }

 

posted on 2021-10-15 11:10  孤独的猫  阅读(107)  评论(0编辑  收藏  举报