Nesnenin bir görüntü konturu algılamam gerekiyor. Bu amaçla OpenCV kütüphanesinin findContours
işlevini kullanıyorum. Ben contrib modules
ile bana tarafındankullanarak Windows 10 (x64)
kullanıyorum.OpenCV 3.0 findContours çöküyor
sorun
sorundur ben bu işlevi, uygulama çöker kullanmaya çalıştığınızda, o. Hata yalnızca bir pencere uygulaması çöktü bana söyleyerek görebilirsiniz bir istisna ya da onaylama işlemi hatası değildir:
Bentest ettik ne
kontrol ettim o görüntü I findContours
'a geçme ikili bir resimdir:
CV_8U
değeriyle aynı olan resim türünü kontrol ettim.
ile sadece piksel, ve ben daha tam olarak aynı şeyi yapmaya çalıştık
örnek ve program yine çöküyor.
// 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);
}
Sürümdeki Debug uygulamalarında veya Debug dms'deki Release dlls'i (veya derleyicinin sürümlerini karıştırırken) kullanmamaya dikkat edin. Bunlardan herhangi biri, biri diğerinden ayrılmış belleği boşaltmaya çalışırken yığın bozulmasına neden olan 1'den fazla uyumsuz yığına sahip olmanıza neden olur. Yığın bozulması her zaman bir ani çökmeye neden olmaz, bu nedenle nedenini belirlemek zor olabilir. – drescherjm