適応的2値化 (adaptive thresholding)
【概要】
適応的2値化(adaptive thresholding)は,画像を白と黒の2階調に変換する処理である。画像全体で1つのしきい値を使うのではなく,画素ごとにその周辺領域から個別にしきい値を求める。照明のむらがある画像でも,明るい部分と暗い部分の両方で適切に2値化できる。ここでは OpenCV の C++ プログラムを例に,適応的2値化の使い方を示す。
【目次】
【関連する外部ページ】
- OpenCV の公式ページ:https://opencv.org
- GitHub の OpenCV のページ:https://github.com/opencv/opencv/releases
【サイト内の関連情報】
- OpenCV について [PDF] ,[パワーポイント]
- OpenCV のインストール,画像表示を行う C++ プログラムの実行手順:別ページ »で説明
- OpenCV と Python を活用した画像・ビデオ処理プログラム:別ページ »にまとめ
- OpenCV 4 の C/C++ プログラム:別ページ »にまとめている。
1. ソースコード
以下は,画像を読み込んでグレースケールに変換し,adaptiveThreshold() 関数で適応的2値化を行う C++ プログラムである。しきい値の決定方法には,近傍領域のガウス分布による重み付き平均を使う ADAPTIVE_THRESH_GAUSSIAN_C を指定している。
#include
using namespace cv;
int
main(int argc, char **argv)
{
const char *imagename = argv[1];
Mat src_img = imread(imagename);
if(!src_img.data)
return -1;
Mat gray_img;
cvtColor(src_img, gray_img, COLOR_BGR2GRAY);
Mat adaptive_img;
adaptiveThreshold(gray_img, adaptive_img, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 7, 8);
namedWindow("Source", WINDOW_AUTOSIZE);
namedWindow("Adaptive", WINDOW_AUTOSIZE);
imshow("Source", src_img);
imshow("Adaptive", adaptive_img);
waitKey(0);
return 0;
}
2. ビルド手順例
以下のコマンドで上記プログラムをビルドする。OpenCV 5 では,必要なインクルードパスとライブラリは pkg-config の opencv5 から取得する(pkg-config は,コンパイルに必要なオプションを自動で出力する補助ツールである)。
g++ -o a.out hoge.cc $(pkg-config --cflags --libs opencv5)