私はこのような関数を使用しています。Findcontours()実行時エラー
Mat large = imread(path+name);
Mat rgb;
if (large.rows > 2500 || large.cols > 1250)
{
pyrDown(large, rgb);
}
else
{
rgb = large.clone();
}
cv::Mat smallx;
cvtColor(rgb, smallx, CV_BGR2GRAY);
Mat grad,connected,bw;
Mat morphKernel = getStructuringElement(MORPH_ELLIPSE, Size(3, 3));
cv::morphologyEx(smallx, grad, MORPH_GRADIENT, morphKernel);
cv::threshold(grad, bw, 100, 255, THRESH_BINARY + THRESH_OTSU);
morphKernel = getStructuringElement(MORPH_RECT, Size(9, 1));
cv::morphologyEx(bw, connected, MORPH_CLOSE, morphKernel);
Mat mask = Mat::zeros(bw.size(), CV_8UC1);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
cv::findContours(connected, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
いくつかの入力画像プロンプト例外関数が戻る、それは私を投げる "_Mybase :: DEALLOCATE(_ptr、_count);" xmemory0クラスのコードブロック。私はこの種のエラーをキャッチし、予期しない停止からこのプロセスを防ぐ必要があります
--------------エラー詳細--------------
私はそのコードブロックを30種類の入力で試しましたが、いくつかの画像でエラーが発生しました。 findcontoursの後、例外が発生し、このメッセージが表示されます。 0xC0000409:0xc0000409 ImageRecognizer.exeで0x74477fb2(ucrtbase.dll)で
未処理の例外。
その時、「ベクトル」クラスは私のVisual Studioでこれらの行で開きます。
~vector() _NOEXCEPT
{ // destroy the object
_Tidy();
}
"xmemory"クラスはこれらの行で開きます。
void deallocate(pointer _Ptr, size_type _Count)
{ // deallocate object at _Ptr, ignore size
_Mybase::deallocate(_Ptr, _Count);
}
まあ、私は50000なしベクトルを初期化しようとしましたが、その時間に私はより多くの入力に対して同じエラーが発生します。とにかく私はそれが有用な解決策ではないことを知っているが、私はこのエラーを完全に解決しなければならない。 (0,0)ポイントなしで実行しようとすると、このオーバーロードされたメソッド のボイド品種を試してみてください –
:: findContours(InputOutputArray \t画像、OutputArrayOfArrays \t輪郭、int型モード、int型の方法、ポイントは、オフセット=ポイント())私はせずに試すことができます – hagor
私は階層が必要です。私はすでにこの方法のオプションを知っていますが、私の場合は役に立ちません。しかし、私はPoint(0,0)なしでテストするつもりです。 –