关于opencv中cv::Mat设置roi

时间:2023-12-19 11:26:44

opencv中设置roi实验:

     cv::Mat SrcImg;
SrcImg = cv::imread("../resource/cpw3.png");
cv::imshow("原图像",SrcImg); // 第一次提取部分ROI
cv::Rect SrcImgROI = cv::Rect( SrcImg.cols/, , SrcImg.cols/, SrcImg.rows/);
cv::Mat SrcROIImg = SrcImg(SrcImgROI);
cv::imshow("ROI",SrcROIImg); // 第一次改变ROI中的值,原图像也改变,表示公用一个内存
SrcROIImg.setTo(cv::Scalar(,,));
cv::imshow("原图像-2",SrcImg); cv::Size wholeSize;
cv::Point ofs;
// 第一次获取ROI相对于原图像的偏移以及尺寸,wholeSize为原图像尺寸,ofs为该roi在原图像的偏移
SrcROIImg.locateROI(wholeSize,ofs);
printf("ROI mat: wholeSize:(%d,%d),ofs:(%d,%d)\n",wholeSize.width,wholeSize.height,ofs.x,ofs.y); // 调整ROI大小尺寸
SrcROIImg.adjustROI(, -SrcImg.rows/, -SrcImg.cols/, );
cv::imshow("ROI-2",SrcROIImg); // 第二次改变调整后ROI中的值,原图像也改变,表示公用一个内存
SrcROIImg.setTo(cv::Scalar(,,));
cv::imshow("原图像-3",SrcImg); // 第二次获取调整后的ROI相对于原图像的偏移以及尺寸
SrcROIImg.locateROI(wholeSize,ofs);
printf("After Adjust ROI mat: wholeSize:(%d,%d),ofs:(%d,%d)\n",wholeSize.width,wholeSize.height,ofs.x,ofs.y); // 第三次 获取原图像ROI部分ROI
SrcImg = SrcImg(SrcImgROI);
cv::imshow("ROI-3",SrcImg);

1.原图像为:

关于opencv中cv::Mat设置roi

2. 第一次提取的ROI图像为:

关于opencv中cv::Mat设置roi

3.第一次改变ROI中的值,原图像也改变,表示公用一个内存

关于opencv中cv::Mat设置roi

4.第一次获取ROI相对于原图像的偏移以及尺寸:

关于opencv中cv::Mat设置roi

5.调整ROI大小尺寸后图像:

关于opencv中cv::Mat设置roi

6.第二次改变调整后ROI中的值,原图像也改变,表示公用一个内存:

关于opencv中cv::Mat设置roi

7.第二次获取调整后的ROI相对于原图像的偏移以及尺寸:

关于opencv中cv::Mat设置roi

8.第三次 获取原图像ROI部分ROI

关于opencv中cv::Mat设置roi