0

opencvで「calcHist」という関数を使用しました。そしてその宣言は次のとおりです。

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

コードスニペットを作成しました。

Mat img = imread("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE);

Mat* arrays = &img;
int narrays = 1;
int channels[] = { 0 };
InputArray mask = noArray();
Mat hist;
int dims = 1;
int histSize[] = { 256 };   
float hranges[] = { 0.0, 255.0 };
float *ranges[] = { hranges };

calcHist(arrays, narrays, channels, mask, hist, dims, histSize, ranges);

次にエラーが発生しました:IntelliSense:オーバーロードされた関数 "calcHist"のインスタンスは引数リストに一致しませんが、
'const'の前に'const'を付けると'float * ranges [] = {ranges}; ' const float *ranges[] = { hranges };大丈夫のように。

したがって、なぜこの「const」が必要であり、histSizeの前の「const」は必要ないのですか。

4

1 に答える 1

1

T*暗黙的にに変換されconst T*ます。同様に、これはT**暗黙的にに変換することを意味しT*const*ます。T*const*ではないconst T**ため、この変換は関数呼び出しを行うためには機能しません。

于 2012-08-04T06:45:29.153 に答える