小白学视觉,笔记,扩展
#include <opencv2\opencv.hpp>
#include <iostream>
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;
}
原图
mask.copyTo(ROI1); //在图像中加入部分图像 此句,执行前 mask.copyTo(ROI1); //在图像中加入部分图像 此句执行后 img ,img2,ROI1,ROI2都改变了 img_copy,img_copy2,ROI2_copy没变
发现浅拷贝的都改变了,深拷贝都没变 imshow(“浅拷贝的img2”, img2); 运行到这里,发现浅拷贝的又都改变了,深拷贝依旧没变 加入noobcv后,对原图img的影响 画实心圆(红),对img2的影响(img同步) 原图的深拷贝始终不影响 ROI对ROI2的影响 深拷贝的ROI2_copy
|