这可能是一个基本问题,但我无法从哪里开始。
我从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 :(得分: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;
}