画像の二値化 Mat, OpenCV

画像の二値化方法について

 

//画像を二値化

#include "opencv2\opencv.hpp"

int main()
{
/*Mat型の構造(クラス)に画像を代入して初期化する.*/
std::string filename = "lena.jpg";
cv::Mat input = cv::imread(filename, 0); //0→グレーで読み込む

/*ファイルの有無をチェック*/
if (input.data == NULL) {
std::cerr << "no such file or directory\n" << std::endl;
return 1;
}

/*初期化する画像がない場合,サイズとカラーの設定で初期化.CV_8UC1は8bitのグレースケール画像(1Channel)の意味*/
cv::Mat output(input.rows, input.cols, CV_8UC1);

/*inputの全画素にアクセスし,127を閾値として2値化*/
for (int y = 0; y < input.rows; ++y)
{
for (int x = 0; x < input.cols; ++x)
{
if (input.data[y *input.step + x] <= 127)
{
output.data[y *input.step + x] = 0;
}
else
{
output.data[y *input.step + x] = 255;
}
}
}

/*画像表示ウィンドウの作成*/
cv::namedWindow("入力画像", CV_WINDOW_AUTOSIZE);
cv::namedWindow("出力画像", CV_WINDOW_AUTOSIZE);

/*画像の表示,第一引数はウィンドウの名前,第二引数は画像を格納したMat型インスタンス*/
cv::imshow("入力画像", input);
cv::imshow("出力画像", output);

/*画像の保存*/
cv::imwrite("lena_out.jpg", output);

/*キー入力があるまで待機*/
cv::waitKey(0);

/*ウィンドウの破棄*/
cv::destroyWindow("入力画像");
cv::destroyWindow("出力画像");

return 0;

}

 以上。

 

これソースコードコピペしたらインデントなくなってるやん。。

まあいいか。面倒だし。