2017-06-19 96 views
0

这可能是一个基本问题,但我无法从哪里开始。修改OpenCV源代码

我从OpenCV包中得到以下错误。我的问题是:在哪里实际上是给出错误的文件,并在可能的修改之后如何重建包以应用更改?

/build/buildd/opencv-2.4.8+dfsg1/modules/core/src/matrix.cpp:323: error: (-215) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows in function Mat 

我使用Anaconda作为python发行版,但似乎无法在其中找到OpenCV源代码。

+0

你不会找到一个预制的二进制包的源代码(蟒蛇等),您可以从OpenCV的网站下载源并自己构建它们(包括Python包装器)。但是,什么让你认为错误出现在OpenCV方面? – Headcrab

回答

1

该错误仅仅意味着您正在使用的cv::Rect()创建子矩阵,具有比原始cv::Mat()更大的尺寸。或者您的原始cv::Mat()可以用width, height == 0为空。源可以证实here

你可能会调用cv::Mat构造函数:

cv::Mat subMat = originalMat(cropRect); 

但不检查是否cropRect在originalMat大小的范围。为了防止这种行为,你可以把一个if条件之前裁剪Mat为:

originalRect = cv::Rect(0, 0, originalMat.cols, originalMat.rows); 
// Check if crop rect completely overlaps the originalMat bounds. 
if (originalRect & cropRect == cropRect) { 
    subMat = originalMat(cropRect); 
} else { 
    std::cout << originalRect << " is less than " >> cropRect << std::endl; 
}