画像の読み込みや出力ができなくては、画像処理しようとしてもできませんよね。そこで、本記事では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を用いた画像の読み込み、表示、書き出しについて解説」があるので、画像処理の次は動画処理について学んで見ましょう