5

このコード行は何を意味し、このコードを javacv に変換するにはどうすればよいですか?

gray = Scalar::all(255);

これは、このコード行に関連するコード全体です。

Mat src = imread("in.jpg"), gray;

cvtColor(src, gray, CV_BGR2GRAY);
threshold(gray, gray, 230, 255, THRESH_BINARY_INV);
vector<Vec4i> hierarchy;
vector<vector<Point> > contours;
findContours(gray, contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);

gray = Scalar::all(255);

これについて誰か説明できますか?

4

2 に答える 2

2

強調表示されたコード行は、グレーを 255 に設定します。これは、行列を値に設定するために OpenCV で使用できる方法の 1 つです。

それを行う他の方法は次のとおりです。

gray.setTo(255); // prior to 2.3.1 it was a buggy on multichannel images
gray = 255; // prior to 2.3.1 it was a buggy on multichannel images

gray.setTo(Scalar::all(255)); // it works regardless the OpenCV version.

しかし、問題はなぜこのソース行が findfContours の後にあるのかということだと思います...

ドキュメントによると、findContours は作業中の画像を変更します (輪郭を抽出し、削除し、輪郭がなくなるまで次の画像に進みます)。その結果、ガベージ イメージ (おそらく黒) が生成されます。

したがって、set-to-255 行は、他の用途のためにそれをクリアします。

メソッドはMat::setTo()JavaCVでも利用できるはずなので、Javaへの変換に問題はありません

于 2012-07-11T06:03:29.193 に答える