0

ヒストグラムを次のように指定しました

MatND skinCrCbHist =Mat::zeros(Size(256,256),CV_8UC1);

ellipse(skinCrCbHist, Point(113, 155.6), Size(283.4, 159.2), 43.0, 0.0, 360.0, Scalar(255), -1); // Using a really big ellipse to find any sort of back projection in CrCb domain.

cvtColor(src, ycrcb, CV_BGR2YCrCb); //src is input, image of a person
float crrange[]={0,255};
float cbrange[]={0,255};
const float* ranges[]={crrange,cbrange};
int channelsy[]={1,2};
calcBackProject( &ycrcb, 1, channelsy, skinCrCbHist, backproj, ranges, 255, true );
imshow("bp",backproj);

私が直面している問題は、backproj が完全に黒い画像を表示することです。自然の画像で calcHist で作成された通常のヒストグラムを使用すると、ある種の逆投影が得られます。しかし、ヒストグラムを使用するにはどうすればよいですか。楕円を指定して人為的に作成し、逆投影を取得します。

4

1 に答える 1

0

問題を正しく理解していれば、元の calcHist 関数で mask を使用できます。

使用している OpenCV のバージョンが指定されていないため、最新の 2.4.6.0 を想定します。メソッドのプロトタイプは次のとおりです (デフォルトと型は省略しています)。

calcHist(images, nimages, channels, mask, hist, dims, histSize, ranges)

3 番目のパラメータはmask. マスクとは、関数がマスク内のゼロ ピクセルに一致するすべてのピクセルを無視することを意味します。プログラムでは、マスクは正しく設定された別の画像です。

問題の疑似コードは次のとおりです。

1) get input image
2) create matrix of same size as input of type CV_8UC1 filled with zeros
3) draw white (value 255) ellipse on the new image
4) call caclHist with the new image as mask

http://docs.opencv.org/modules/imgproc/doc/histograms.html

于 2013-08-29T12:47:37.763 に答える