2017-06-19 113 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; 
}