opencvで二次元のヒストグラムを描画したいです。
このページのプログラムを実行しようとしたのですが、
float bin_val = cvQueryHistValue_2D (hist, h, s);
この部分で、式が必要ですというエラーが出ます。
cvQueryHistValue_2Dの定義の仕方が間違っているのでしょうか?
解決方法をよろしくお願い致します。
int main (int argc, char **argv) { #define cvCvtPixToPlane cvSplit #define cvQueryHistValue_2D( hist, h, s ) IplImage *src, *hsv; IplImage *h_plane, *s_plane, *v_plane; IplImage *planes[2]; int h_bins = 30, s_bins = 32; int hist_size[] = { h_bins, s_bins }; float h_ranges[] = { 0, 181 }; /* 色相は0(0度,赤)から180(360度,赤)まで変化する */ float s_ranges[] = { 0, 256 }; /* 彩度は0(黒-グレー-白)から255(純粋なスペクトラムカラー)まで変化する */ float *ranges[] = { h_ranges, s_ranges }; int scale = 10; IplImage *hist_img = cvCreateImage (cvSize (h_bins * scale, s_bins * scale), 8, 3); CvHistogram *hist; float max_value = 0; int h, s; if (argc != 2 || (src = cvLoadImage ("lenna.png", CV_LOAD_IMAGE_COLOR)) == 0) return -1; hsv = cvCreateImage (cvGetSize (src), 8, 3); planes[0] = h_plane = cvCreateImage (cvGetSize (src), 8, 1); planes[1] = s_plane = cvCreateImage (cvGetSize (src), 8, 1); v_plane = cvCreateImage (cvGetSize (src), 8, 1); // (1)入力画像の色空間をRGBからHSVに変換する cvCvtColor (src, hsv, CV_BGR2HSV); cvCvtPixToPlane (hsv, h_plane, s_plane, v_plane, 0); // (2)ヒストグラムを計算 hist = cvCreateHist (2, hist_size, CV_HIST_ARRAY, ranges, 1); cvCalcHist (planes, hist, 0, 0); // (3)各ビンにおける値を求め,それを元に輝度値を算出して描画 cvGetMinMaxHistValue (hist, 0, &max_value, 0, 0); cvZero (hist_img); for (h = 0; h < h_bins; h++) { for (s = 0; s < s_bins; s++) { float bin_val = cvQueryHistValue_2D (hist, h, s); int intensity = cvRound (bin_val * 255 / max_value); cvRectangle (hist_img, cvPoint (h * scale, s * scale), cvPoint ((h + 1) * scale - 1, (s + 1) * scale - 1), CV_RGB (intensity, intensity, intensity), CV_FILLED); } } // (4)入力画像と二次元(H-S)ヒストグラムを表示して,何かキーが押されるまで待つ cvNamedWindow ("Source", 1); cvShowImage ("Source", src); cvNamedWindow ("H-S Histogram", 1); cvShowImage ("H-S Histogram", hist_img); cvWaitKey (0); cvDestroyWindow ("Source"); cvDestroyWindow ("H-S Histogram"); cvReleaseImage (&src); cvReleaseImage (&hsv); cvReleaseImage (&h_plane); cvReleaseImage (&s_plane); cvReleaseImage (&v_plane); cvReleaseImage (&hist_img); cvReleaseHist (&hist); return 0; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/12 04:59