1

計算した画像のヒストグラムがあります。実際にヒストグラムを確認できるように、これを画像として表示したいと考えています。私の問題はスケーリングに関係していると思いますが、左上の0,0から始まる座標系についても少し混乱しています。

int rows = channel.rows;
int cols = channel.cols;
int hist[256] = {0};
for(int i = 0; i<rows; i++)
{
    for(int k = 0; k<cols; k++ )
    {
        int value = channel.at<cv::Vec3b>(i,k)[0];
        hist[value] = hist[value] + 1;
    }
}

Mat histPlot = cvCreateMat(256, 500,CV_8UC1);
for(int i = 0; i < 256; i++)
{
    int mag = hist[i];
    line(histPlot,Point(i,0),Point(i,mag),Scalar(255,0,0));
}

namedWindow("Hist",1);
imshow("Hist",histPlot);

これは、ヒストグラムを作成して結果を表示するための私の計算です。2 番目のループで mag/100 を実行すると、(逆さまですが) プロットに似たものが表示されます。画像の値を調整するたびにこのメソッドを呼び出すため、ヒストグラムも形状を変更する必要がありますが、そうは見えません。ヒストグラムをスケーリングして適切に表示するための助けをいただければ幸いです。

4

1 に答える 1

0
  • cvCreateMat (別名、古い c-api ) を使用しないでください。また、行と列が間違っているようです。さらに、カラー描画が必要な場合はカラー画像も必要なので、次のようにします。

    Mat histPlot( 500, 256, CV_8UC3 );

  • 画像の原点は左上 (0,0) であるため、y を逆にする必要があります。

    line(histPlot,Point(i,histPlot.rows-1),Point(i,histPlot.rows-1-mag/100),Scalar(255,0,0));

于 2013-11-11T22:15:31.603 に答える