创建ROI 两种方法
一种指定初始点和宽+高
二种指定哪些行,那些列
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat a;
a = imread("../../lena_gray.tif", IMREAD_GRAYSCALE);
if (a.empty())
return 1;
namedWindow("Original");
imshow("Original", a);
//roi,方法1;
Rect r(50, 20, 150, 150); //typedef Rect2i Rect;列(从上到下,是x)
//修改roi,也会修改原图中roi部分
Mat roiMat(a, r);
imshow("roi image", roiMat);
//roi,方法2:range
Mat roiMat2 = a(Range::all(), Range(50, 200)); //所有行,指定区域列
imshow("second roi", roiMat2);
Sobel(roiMat, roiMat, CV_8U, 1, 1);
imshow("roi1", roiMat);
imshow("original", a);
waitKey(0);
return 0;
}
上述roi方法都是浅拷贝;数据区data是同一片数据
深度拷贝Mat::clone()
Mat::copyTo()