1. 程式人生 > >opencv2學習筆記5-操作影象(掩模拷貝ROI-不一樣大小的影象相加)

opencv2學習筆記5-操作影象(掩模拷貝ROI-不一樣大小的影象相加)

假設我們想合併兩個不一樣大小的影象,由於cv::add要求輸入的兩個影象具有相同的尺寸,所以不能直接使用,需要在使用之前定義感興趣區域。只要較大影象的感興趣區域等於較小影象的大小,add就可以正常工作了。

int main()
{
	cv::Mat img1 = cv::imread("boldt.jpg");
	cv::Mat logo = cv::imread("logo.bmp");
	cv::Mat imgROI = img1(cv::Rect(385, 270, logo.cols, logo.rows));

	cv::addWeighted(imgROI, 1.0, logo, 0.5, 0., imgROI);
	cv::namedWindow("with logo");
	cv::imshow("with logo", img1);
	cv::waitKey(0);
}
圖片1:


logo圖片:


效果圖:


由於Logo影象和原始影象是直接相加的(同時可能會伴隨著畫素飽和),視覺效果不是很滿意。所以直接將畫素設定為logo影象的畫素值效果會好一點。

#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<vector>

int main()
{
	cv::Mat img1 = cv::imread("boldt.jpg");
	cv::Mat logo = cv::imread("logo.bmp");
	cv::Mat mask = cv::imread("logo.bmp", 0);
	cv::Mat imgROI = img1(cv::Rect(385, 270, logo.cols, logo.rows));
	logo.copyTo(imgROI, mask);

	cv::namedWindow("with logo");
	cv::imshow("with logo", img1);
	cv::waitKey(0);
}

效果圖: