format_list_bulleted
【C++/OpenCV】C++/OpenCVを用いた画像の読み込み、表示、書き出しについて解説
最終更新日時:2020-05-25 17:24:55



画像の読み込みや出力ができなくては、画像処理しようとしてもできませんよね。そこで、本記事ではC++とOpenCV(Version4)を用いた画像の読み込み、表示、書き出しについて解説します。

画像の処理

画像の処理についてはじめに画像の読み込み、表示、書き出しが一通り実行できるソースコードを紹介して、そのソースコードをもとに解説していきます。

説明に用いるソースコード

#include  <opencv2/opencv.hpp>

int main(void)
{
	// 画像を格納するオブジェクトを宣言して画像を読み込む
	cv::Mat	image = cv::imread("opencv-logo.png");;

 	//エラー処理
	if (image.empty() == true) {
		// 画像の中身が空なら終了する
		return 0;
	}
	
	// ウィンドウに画像を表示する
	cv::imshow("opencv_logo", image);
 
	// キーが押されるまで待つ
	cv::waitKey(0);
	//  画像を書き出し
	cv::imwrite("output.png", image);	
 
	return 0;
}

画像の読み込み

まずは、Mat型のimageというオブジェクトを宣言し、そこにcv::imread()関数を使って画像を代入します。Mat型は行列(Matrix)という意味で画像を格納するオブジェクトを宣言します。cv::imread()関数は引数に画像のファイル名を指定します。

cv::Mat	image = cv::imread("パス+画像ファイル(../Picture/image.png)");

また、Mat型のempty()メソッドを用いて画像の中身が空の場合、プログラムを終了するように設定しています。 

empty()メソッドは配列が要素を持たない場合に true を返します。

if (image.empty() == true) {
	return 0;
}

画像の表示

画像の表示はcv::imshow()関数を用います。第1引数に表示ウィンドウのタイトル("表示名")、第2引数に表示させたいMat型のオブジェクト(image)を指定します。

cv::imshow("表示名", image);

また、表示を制御するためにはcv::waitkey()関数を用います。引数に0を指定すると、何か入力があるまでウィンドウが表示し続けます。また、0でないときは、引数としてミリ秒単位で表示し続ける時間を指定できます。引数を1000とすると、1秒後にウィンドウは閉じます。

cv::waitKey(0);

画像の書き出し

画像の書き出しはcv::imwrite()関数を用います。第1引数に書き出したい画像の画像名("output.png")、第2引数に表示させたいMat型のオブジェクト(image)を指定します。

cv::imwrite("画像名(output.png)", image);	

実装

以下のコマンドを打つことでコンパイルを行います

$ g++ -std=c++11 -o Image Image.cpp `pkg-config --cflags --libs opencv4 `

そして以下のコマンドを打ち実行します。

$ ./Image

このOpenCVのロゴをcv::imread()関数の引数として実行した結果です。

こちらの画像はcv::imshow()関数を用いた画像の表示を行なっています。

また、画像の書き出しも行うことが確認できました。

この記事のまとめ

本記事ではC++とOpenCVを用いた画像の処理(読み込み、表示、書き出し)のやり方を解説しました。

これができれば、画像をcv::imread()関数で読み込みグレーにしたり色々な画像処理を施しcv::imshow()関数で結果を確認することができ、cv::imwrite()関数で画像を書き出すことができます。

ぜひOpenCVとC++を用いた画像処理を行なってみてください!

また、この続きとして「【C++/OpenCV】C++/OpenCVを用いた画像の読み込み、表示、書き出しについて解説」があるので、画像処理の次は動画処理について学んで見ましょう