Mat OpenCV Rect ROI:访问冲突
我是OpenCV图像处理新手。我的任务很简单。我必须将图像的1/4降到1/4以下。图像的大小为320 x 240。我在Mat对象中使用ROI Rect来获得它Mat OpenCV Rect ROI:访问冲突,opencv,rect,mat,roi,Opencv,Rect,Mat,Roi,我是OpenCV图像处理新手。我的任务很简单。我必须将图像的1/4降到1/4以下。图像的大小为320 x 240。我在Mat对象中使用ROI Rect来获得它 Mat img_roi; img_roi= image(cv::Rect(0,180,320,240)); 我得到以下错误: 第一个例外情况:0x766 94C41F在第一个.EXE:微软C++异常:CV::异常>内存位置0x00 41EC30… 0x766 94C41F未处理异常:微软C++异常:CV::异常在内存位置0x00 41E
Mat img_roi;
img_roi= image(cv::Rect(0,180,320,240));
我得到以下错误:
第一个例外情况:0x766 94C41F在第一个.EXE:微软C++异常:CV::异常>内存位置0x00 41EC30… 0x766 94C41F未处理异常:微软C++异常:CV::异常在内存位置0x00 41EC30.
如果我在上面的代码中指定Rect0,0320,60,我得到的结果是上半部分,代码适用于其他一些值,例如Rect 0,0320240,即完整图像。但不具有较低的季度值0180320240 我还应该告诉您,我是通过使用Iplimage获得结果的。只有Mat对象才会产生问题如果你们中有人能指导我解决这个问题,我将非常感激。您图像的下1/4是RECT0180320,60。它不是rect0180320240,也不是Rect0,0320,60。图像的下1/4是rect0180320,60。它不是rect0180、320、240,也不是Rect0、0320、60。cv::Rect的参数是: cvRectint x,int y,int width,int height 在这里,x和Y表示左上角,而宽度和高度表示希望在图像中包含的列数和行数 在您的例子中:行=320,列=240 因此,要获得左下角,请使用: Rect 0,image.rows/2,image.cols/2,image.rows/2 如果您想要右下角的图像,请使用: Rect image.cols/2,image.rows/2,image.cols/2,image.rows/2cv::Rect的参数是: cvRectint x,int y,int width,int height 在这里,x和Y表示左上角,而宽度和高度表示希望在图像中包含的列数和行数 在您的例子中:行=320,列=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非常感谢Michael Burdinov。成功了。重要的是,我理解我的错误。我想知道,Iplimage是如何运作的?不客气。至于它为什么与IplImage一起工作,我认为您得到的异常是由OpenCV本身引发的,即Mat构造函数在健全性检查时失败。我不确定IplImage是否执行了相同的健全性检查。对未分配内存的访问总是不好的,但并不总是产生异常。非常感谢您的解释。非常感谢Michael Burdinov。成功了。重要的是,我理解我的错误。我想知道,Iplimage是如何运作的?不客气。至于它为什么与IplImage一起工作,我认为您得到的异常是由OpenCV本身引发的,即Mat构造函数在健全性检查时失败。我不确定IplImage是否执行了相同的健全性检查。对未分配内存的访问总是不好的,但并非总是会产生异常。非常感谢您的解释。