画像の二値化 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;
}
以上。
これソースコードコピペしたらインデントなくなってるやん。。
まあいいか。面倒だし。