イメージのオブジェクトの輪郭を検出する必要があります。その目的のために、私はOpenCVライブラリの関数findContours
を使用しています。私はで私が編集したをWindows 10 (x64)
に使っています。OpenCV 3.0 findContoursがクラッシュする
問題
は、問題は、私は、この機能、アプリケーションのクラッシュを使用しようとすると、ということです。エラーは、私が唯一のウィンドウは、アプリケーションがクラッシュしたことを私に言って見ることができ、例外またはアサーションの失敗ではありません。
私はをテストしている何
私がチェックしたその画像I findContours
に渡された画像は、バイナリ画像です:
CV_8U
と同じ0の画像のタイプを確認しました。
私もOpenCVのチュートリアルやフォーラムからの例で検索しました、と私はより正確に同じことをしようとしている私も、ヒストグラムをチェックして、値0と1
を持つピクセルのみがあります例では、プログラムが再びクラッシュします。
コードここ
は、私が実行していたコードです:
// 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