Opencv图像指定区域混合和叠加
程序员文章站
2024-03-15 09:17:53
...
方法一:
//使用void addWeighted(InputArray src1, double alpha, InputArray src2,
// double beta, double gamma, OutputArray dst, int dtype = -1);
//图片src1,权值alpha,图片src2,权值beta,偏差值gamma,输出图片dst。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat src = imread("E:/openvinoR1/test_image_video/red.jpg");
Mat mask = imread("E:/openvinoR1/test_image_video/10.jpg");
if (src.empty()) {
printf("could not load image...\n");
return 0;
}
if (mask.empty()) {
printf("could not load image...\n");
return 0;
}
//提取src中要叠加的区域
Mat roi = src(Rect(0, 0, mask.cols, mask.rows));
// 0.5为图片叠加时所占的比重
addWeighted(roi, 0.5, mask, 0.5, 0.0, roi);
imshow("input", src);
waitKey(0);
return 0;
}
输出结果:
方法2:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
//使用void GpuMat::copyTo(OutputArray dst, InputArray mask) const
int main1(int argc, char** argv) {
Mat src = imread("E:/openvinoR1/test_image_video/4.jpg");
Mat mask = imread("E:/openvinoR1/test_image_video/ope.jpg");
if (src.empty()) {
printf("could not load image...\n");
return 0;
}
if (mask.empty()) {
printf("could not load image...\n");
return 0;
}
Mat roi = src(Rect(0, 0, mask.cols, mask.rows));
Mat mask_1(roi.rows,roi.cols,roi.depth(),Scalar(1));//不这一行,图片地板为黑色
mask.copyTo(roi,mask_1);
imshow("input", src);
waitKey(0);
return 0;
}
输出结果:
下一篇: 计算连通区域的像素点个数,找目标圆点