问题:
OpenCV 2中使用Mat图像数据进行ROI提取子图像的操作时,获取的子图像与源图像依然存在联系。
Mat big = imread(....);
Mat sub = big(ROI); // 获取big的ROI区域子图
// 修改sub图像像素,big跟随变化
// 修改big图像像素, sub跟随变化
很奇怪对不对?? 具体原因,后续继续探究!
代码:
int main() {
//
Mat big = Mat::zeros (400, 600, CV_8U);
if (!big.empty()) {
Rect roi (150, 100, 300, 200);
Mat smll = big (roi);
//
for (int row = 0; row < smll.rows; row++) {
for (int col = 0; col < smll.cols; col++) {
smll.at<uchar> (row, col) = 255;
}
}
//
for (int row = 200; row < 300; row++) {
for (int col = 400; col < 500; col++) {
big.at<uchar> (row, col) = 127;
}
}
imshow ("big", big);
imshow ("smll", smll);
waitKey (0);
return 0;
}
//
return 0;
}
运行:
说明: