欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}

输出结果:

Opencv图像指定区域混合和叠加

方法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;
}

输出结果:

Opencv图像指定区域混合和叠加