1. 程式人生 > >openCV學習筆記-ROI區域的操作

openCV學習筆記-ROI區域的操作

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>

using namespace cv;
using namespace std;

//函式宣告
bool ROI_AddImage();

/*
	==========
	  主函式
	==========
*/
int main(int argc, char** argv)
{
	
	ROI_AddImage();
return 0;
}

bool ROI_AddImage()
{
	//讀入影象
	Mat srcImage = imread("boy.jpg");
	Mat logo = imread("logo.jpg");
	if (srcImage.empty())
	{
		cout<<"讀取原圖錯誤!"<<endl;
		return false;
	}
	if (logo.empty())
	{
		cout<<"讀取logo錯誤!"<<endl;
	}

	//.定義Roi區域
	Mat imageROI = srcImage(Rect(50,50,logo.cols,logo.rows));
	Mat mask = imread("logo.jpg",0);//載入logo灰度圖

	//將掩膜複製到RoiImage
	logo.copyTo(imageROI, mask);

	//顯示
	imshow("result",srcImage);
	waitKey(0);
	return true;
}

感性區域:ROI (region of interest).設定感性興趣,用來專注或者簡化工程。就是圈定一個指定的區域,作為分析和關注度重點。就是需要處理的區域,好處是這樣可以減少計算的時間,增加精度。

然後定義一個roi方法有如下兩種:

Mat imageROI;

1.法一:imageROI = srcImage(Rect(50,50,logo.cols, logo.rows));

2.法二:imageROI = sreIamge(Range(50,logo.rows+50), Range(50, logo.cols));

實現的函式流程是載入兩張定義圖片到srcImage和logo中, 然後定義Mat類的imageROI,並且使用Rect設定了感性區域,把srcImage 和imageROI關聯了起來。接著讀入logo的灰度圖mask,最後把mask copy 到imageROI中。


bool ROI_AddImage_line()
{
	//讀入影象
	Mat srcImage = imread("boy.jpg");
	Mat logo = imread("logo.jpg");
	if (srcImage.empty())
	{
		cout<<"讀取原圖錯誤!"<<endl;
		return false;
	}
	if (logo.empty())
	{
		cout<<"讀取logo錯誤!"<<endl;
	}

	//.定義Roi區域
	Mat imageROI = srcImage(Rect(50,50,logo.cols,logo.rows));
	

	addWeighted(imageROI,0.5, logo, 0.5, 0.0, imageROI);

	//顯示
	imshow("result",srcImage);
	waitKey(0);
	return true;
}
ROI線性混合的操作