Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mat OpenCV Rect ROI:访问冲突_Opencv_Rect_Mat_Roi - Fatal编程技术网

Mat OpenCV Rect ROI:访问冲突

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

我是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 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/2

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/2

非常感谢Michael Burdinov。成功了。重要的是,我理解我的错误。我想知道,Iplimage是如何运作的?不客气。至于它为什么与IplImage一起工作,我认为您得到的异常是由OpenCV本身引发的,即Mat构造函数在健全性检查时失败。我不确定IplImage是否执行了相同的健全性检查。对未分配内存的访问总是不好的,但并不总是产生异常。非常感谢您的解释。非常感谢Michael Burdinov。成功了。重要的是,我理解我的错误。我想知道,Iplimage是如何运作的?不客气。至于它为什么与IplImage一起工作,我认为您得到的异常是由OpenCV本身引发的,即Mat构造函数在健全性检查时失败。我不确定IplImage是否执行了相同的健全性检查。对未分配内存的访问总是不好的,但并非总是会产生异常。非常感谢您的解释。