3
我需要檢測對象的圖像輪廓。爲此,我使用OpenCV庫的功能findContours
。我在編輯的Windows 10 (x64)
上使用OpenCV 3.0 (x86)
。OpenCV 3.0 findContours崩潰
問題
的問題是,當我嘗試使用此功能,應用程序崩潰。該錯誤是不是異常或斷言失敗,我只能看到一個窗口,對我說該應用程序已崩潰:
我已經測試
我已經檢查了我的形象「M傳遞到findContours
是二值圖像:
我已經檢查了圖像,該圖像是0,同爲CV_8U
值的類型。
我甚至查直方圖,並有只值0和1
像素我也搜索了從OpenCV的教程和論壇的例子,我試圖做同樣的比例如,程序又崩潰了。
代碼
下面是我執行的代碼:
// This is the main function:
int test_findContours(const std::string &path){
Mat img = imread(path, IMREAD_GRAYSCALE);
if (!img.data){
cout << "ERROR" << endl;
return -1;
}
Mat mask;
getRemBackgroundMask(img, mask);
vector< vector<Point> > contours;
// Here the program crashes:
findContours(mask, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
return 0;
}
// Get the mask to remove the background
void getRemBackgroundMask(const Mat &img, Mat &mask) {
threshold(img, mask, 70, 1, THRESH_BINARY_INV);
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
openning(mask, mask, kernel);
}
void openning(const Mat &binary, Mat &result, const Mat &kernel){
erode(binary, result, kernel);
dilate(binary, result, kernel);
}
您必須小心,不要在發行版(或混合編譯器版本)中的調試應用程序或調試dll中使用發行版dll。其中任何一種情況都會導致您有超過1個不兼容的堆,這會在嘗試從另一個堆釋放分配的內存時導致堆損壞。堆損壞並不總是會導致即時崩潰,因此可能難以確定原因。 – drescherjm