質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

4831閲覧

二次元のヒストグラム

yamata

総合スコア36

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/12/12 04:24

opencvで二次元のヒストグラムを描画したいです。

http://opencv.jp/sample/histogram.html

このページのプログラムを実行しようとしたのですが、

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; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

下記のコードはサンプル・ソースにはありませんが、何故追加したのでしょうか?

C++

1#define cvCvtPixToPlane cvSplit 2#define cvQueryHistValue_2D( hist, h, s )

有りがちな問題としては、サンプル・ソースにある下記コードがエラーになったから、無理っとやってみたということでしょうか?

C++

1#include <cv.h> 2#include <highgui.h>

もし、そうであれば、インクルード・パスの設定をミスしてます。
お使いのOSと開発環境向けにOpenCVの使い方が解説されているサイトが恐らくあると思いますので、それを参考にされて下さい。(お使いのOSと開発環境の記載がないので、具体的なアドバイスはできないです。)

投稿2016/12/12 04:30

編集2016/12/12 04:31
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamata

2016/12/12 04:59

そのとおりでした。できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問