『OpenCVによる画像処理入門』練習問題6.2 途中まで
『OpenCVによる画像処理入門』の練習問題6.1 1と2のみ。
3の疑似カラー処理が分からない。。
練習問題6.2
- 適当なグレースケール画像を用意し、式6.2,6.3,6.4にしたがって、度数分布と累積度数を求めよ
- 6.2節を参考に累積度数のグラフを描画せよ
グレースケール画像から、手計算で度数分布を求める方法がわからなかったので、全てプログラムを使用した。
度数分布を求める=度数分布表を描画せよ、と解釈。
プログラム(共通処理(p.51)は省略)
Mat img_hst = Mat::zeros(100, 256, CV_8UC1);
Mat img_sum = Mat::zeros(100, 256, CV_8UC1);
const int hdims[] = { 256 };
const float hranges[] = { 0, 256 };
const float* ranges[] = { hranges };
int channels[] = { 0 };
int sum = 0;
// 度数分布を求める
Mat hist;
calcHist(&img_src, 1,channels, Mat(), hist, 1, hdims, ranges);
// 度数の最大・最小値を取得
double hist_min, hist_max;
minMaxLoc(hist, &hist_min, &hist_max);
for (int i = 0; i <= 255;i++)
{
// 累積度数の計算
int v = saturate_cast<int>(hist.at<float>(i));
sum = sum + v;
// 度数分布の表示
line(img_sum, Point(i, img_hst.rows), Point(i, img_hst.rows - img_hst.rows * (sum * 0.0000005)), Scalar(255, 255, 255));
// 累積度数グラフの表示
line(img_hst, Point(i, img_hst.rows), Point(i, img_hst.rows - img_hst.rows * (v / hist_max)), Scalar(255, 255, 255));
}
// 累積度数の表示
cout << sum << endl;
入力画像
度数分布
calcHist()を使用して度数分布を求める。
累積度数
1920000
各画素ごとの度数をsumに格納して累積。
累積度数のグラフ
度数分布の表示で使用した描画関数line()を使用。分解能として*0.0000005しているが、表示を繰り返してちょうど良いのにした。
Author And Source
この問題について(『OpenCVによる画像処理入門』練習問題6.2 途中まで), 我々は、より多くの情報をここで見つけました https://qiita.com/ikenohotori/items/57fbe488a507271335d4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .