opencv (十九)ROI区域截取

小白学视觉,笔记,扩展
opencv (十九)ROI区域截取_第1张图片
opencv (十九)ROI区域截取_第2张图片
opencv (十九)ROI区域截取_第3张图片
opencv (十九)ROI区域截取_第4张图片

#include 
#include 

using namespace cv;
using namespace std;

int main()
{
	Mat img = imread("E:\\OpenCV\\Images\\lena.png");
	Mat noobcv = imread("E:\\OpenCV\\Images\\noobcv.jpg");

	if (img.empty() || noobcv.empty())
	{
		cout << "请确认图像文件名称是否正确" << endl;
		return -1;
	}
	Mat ROI1, ROI2, ROI2_copy, mask, img2, img_copy;
	resize(noobcv, mask, Size(200, 200));
	img2 = img;  //浅拷贝

	//深拷贝的方式
	img.copyTo(img_copy);

	//两种在图中截取ROI区域的方式
	Rect rect(206, 206, 200, 200);  //定义ROI区域
	ROI1 = img(rect);  //截图

	ROI2 = img(Range(300, 500), Range(300, 500));  //第二种截图方式

	img(Range(300, 500), Range(300, 500)).copyTo(ROI2_copy);  //深拷贝

	mask.copyTo(ROI1);  //在图像中加入部分图像


	imshow("加入noobcv后图像", img);
	imshow("深拷贝的img_copy", img_copy);

	imshow("ROI对ROI2的影响", ROI2);
	imshow("深拷贝的ROI2_copy", ROI2_copy);

	circle(img, Point(300, 300), 20, Scalar(0, 0, 255), -1);  //绘制一个圆形

	imshow("浅拷贝的img2", img2);

	imshow("画圆对ROI1的影响", ROI1);

	waitKey(0);
	return 0;
}

原图
opencv (十九)ROI区域截取_第5张图片
opencv (十九)ROI区域截取_第6张图片

mask.copyTo(ROI1); //在图像中加入部分图像
此句,执行前
opencv (十九)ROI区域截取_第7张图片
mask.copyTo(ROI1); //在图像中加入部分图像
此句执行后
img ,img2,ROI1,ROI2都改变了
img_copy,img_copy2,ROI2_copy没变

发现浅拷贝的都改变了,深拷贝都没变
opencv (十九)ROI区域截取_第8张图片
imshow(“浅拷贝的img2”, img2);
运行到这里,发现浅拷贝的又都改变了,深拷贝依旧没变
opencv (十九)ROI区域截取_第9张图片
加入noobcv后,对原图img的影响
画实心圆(红),对img2的影响(img同步)
原图的深拷贝始终不影响

ROI对ROI2的影响
深拷贝的ROI2_copy
opencv (十九)ROI区域截取_第10张图片

你可能感兴趣的:(OpenCV,C++,opencv,计算机视觉,人工智能)