Mat OpenCV Rect ROI:访问冲突

时间:2014-01-21 17:38:05

标签: opencv rect mat roi

我是OpenCV图像处理的新手。我的任务很简单。我必须获得1/4的图像(低1/4)。图片的大小为320 x 240.我在Rect对象中使用了ROI Mat来获取它。

Mat img_roi;
img_roi= image(cv::Rect(0,180,320,240));

我收到以下错误:

  

first.exe中0x7669c41f的第一次机会异常:Microsoft C ++异常:cv :: Exception>在内存位置0x0041ec30 ..   first.exe中0x7669c41f处的未处理异常:Microsoft C ++异常:cv ::异常位于>内存位置0x0041ec30 ..

如果我在上面的代码中指定Rect(0,0,320,60),我得到的结果(上半部分)和代码适用于其他一些值,例如Rect (0,0,320,240),即完整图像。但不是季度值较低(0,180,320,240)。

我还应该告诉我使用Iplimage获得结果。只有Mat对象会产生问题。

如果有人能指导我解决这个问题,我真的很感激。

2 个答案:

答案 0 :(得分:2)

图片的下1/4为Rect(0,180,320,60)。它不是Rect(0,180, 320, 240),也不是Rect(0,0,320,60)

答案 1 :(得分:2)

cv::Rect的论点是:

cvRect(int x, int y, int width, int height);

这里x和Y代表左上角,而宽度和高度代表你想要在图像中拥有的列数和行数。

在您的情况下:rows = 320,cols = 240

所以要使左下角使用:

Rect( 0, image.rows/2, image.cols/2, image.rows/2 )

如果您想要右下方图片,请使用:

Rect( image.cols/2, image.rows/2, image.cols/2, image.rows/2 )