[OpenCvによる画像処理入門 改定第3版]の沼にハマる-calcHist()編

【嵌った場所】
ページ:99ページ
サンプルコード:6.2.2 プログラム例:ヒストグラムを描画する
問題のコード行:11行目

Mat ing_hist;
img_hst=Mat::zeros(100,256,CV_8UVC1);

const int hdims[]={256);
const float hranges[]={0,256};
const float *ranges[]={ranges};

Mat hist;
calcHist(&img_src,1,0,Mat(),hist,1,hdims,ranges);


このコードで入力するとVisual Studio 2022ではcalcHistの部分でエラーを起こす。変数の数が足りない。

OpenCV 4.8.0のオフィサルサイトでの引数は以下の通り10個ある。


void cv::calcHist	(	const Mat *images,
            int 	nimages,
            const int * 	channels,
            InputArray 	mask,
            OutputArray 	hist,
            int 	dims,
            const int * 	histSize,
            const float ** 	ranges,
            bool 	uniform = true,
            bool 	accumulate = false 
          )	

どうしようもないのでChatGTPに聞いてたところ上述のコードには1つの問題があるとのこと。

問題:calcHist()の3番めの仮引数

そもそも3番めの仮引数はchannelsなので、仮引数はinteger arrayへのポインタを使用すべきで”整数”を放り込むべきではない。

とのこと、、、、

Mat ing_hist;
img_hst=Mat::zeros(100,256,CV_8UVC1);

int channels[]={0};
const int hdims[]={256);
const float hranges[]={0,256};
const float *ranges[]={ranges};

Mat hist;
calcHist(&img_src,1,channels,Mat(),hist,1,hdims,ranges);

ここを修正したら問題なく起動できた。

書籍のサポートページを訪問したけど、正誤データには乗っていないため、一体どういうことなのか?
素人にはなかなか難しい問題である。

この記事が気に入ったらサポートをしてみませんか?