有一个图像以cv::Mat
格式读取,我只想保留一个矩形区域,以便在图像中心进行检测。我尝试了cvCopy
方法,但它需要将图像格式设置为cvArr
,并且任何人都知道如何实现仍然使用Mat
格式的方法吗?
我的代码和截图用于创建遮罩,掩码的大小与原始帧不匹配似乎很奇怪。请问有什么提示吗?
*cap >> frame1;
Rect roi(100,100,100,100);
for(int i =0; i<frame1.rows; i++)
{
for(int j=0; j<frame1.cols;j++)
{
if(!roi.contains(Point(i,j)))
{
frame1.at<uchar>(i,j) = 0;
}
}
}
答案 0 :(得分:6)
只需创建引用相同数据的新图像。
cv::Rect const mask(x1, y1, x2, y2);
cv::Mat roi = image(mask);
现在您可以进行 roi 处理。 roi上的所有更改也会适用于图像。