0

シャープネスと明るさを推定するためだけに、MAT 変数と MatND 変数の平均値を取得したいと考えています。しかし、私は漠然とした価値観に直面しており、現実の問題に直面しています。私は最善を尽くしましたが、まだ混乱しています。正しいことをしているかどうか、私には本当にわかりません。

    calcHist(&src_yuv,1,channels,Mat(),hist,1,histSize,ranges,true,false);
    Size d = hist.size();
    rows = d.height;
    cols = d.width;
    for(int k=0;k<hbins;k++)
    {
     for(int l=0;l<sbins;l++)
     {
       total = total + hist.at<float>(k,l);
     }
    }
    brightness = total/(rows*cols);

ここでは、src_yuv の輝度チャネルのヒストグラムを計算しようとしています。これは YUV 形式で、値を平均化しています。私はそれを正しい方法でやっていますか?<' '> 内のデータ型を uchar から long int に変更すると、異なる値になってしまいますが、これは理解できます。しかし、どのデータ型を使用するのが適切かはわかりません。さらに、hbins、sbins、またはrows、cols内でループする必要がありますか? 私を助けてください。これで長い間立ち往生しています。

     Laplacian(src_gray,dst,ddepth,kernel_size,scale,delta,BORDER_DEFAULT);
     Size s = dst.size();
     rows = s.height;
     cols = s.width;
     total = 0;
     max =  0;
     for(int k=0;k<rows;k++)
     {
       for(int l=0;l<cols;l++)
       {
          total = total + dst.at<>(k,l);
       }
     }
     average = total/(rows*cols);

上記の場合、平均を計算する正確な方法は何ですか? ここで私を助けてくれませんか?マットの in から始めて、合計と平均の long int から始めて、さまざまなデータ型を試しました。これはグレースケール画像であり、その結果はラプラシアン畳み込み画像になります。

4

1 に答える 1

1

入力 src_yuv を calcHist の前に BGR に変換すると、同じコードで目的の出力が得られます。

編集: YUV の場合:-

out = imread("Lena.jpg");
out.convertTo(out, CV_RGB2YCrCb);
MatND hist;
int hbins = 30, sbins = 32;
int histSize[] = {hbins, sbins};
float hranges[] = { 0, 180 };
float sranges[] = { 0, 256 };
 int channels[] = {0,1,2};
const float* ranges[] = { hranges, sranges };
calcHist( &out, 1, channels, Mat(), 
         hist, 2, histSize, ranges,
         true, 
         false );
Size d = hist.size();
int rows = d.height;
int cols = d.width;
float total;
float brightness;
for(int k=0;k<hbins;k++)
{
    for(int l=0;l<sbins;l++)
    {
        total = total + hist.at<float>(k,l);
    }
}
brightness = total/(rows*cols);

これにより、明るさが246.895になります

于 2013-01-16T01:13:53.710 に答える