C++, OpenCV, Mat型, グレースケール読み込み

今研究室のゼミで、画像処理に関係するプログラミングをやったりしている。

これがまた初学者にはさっぱりで、ネットで色々調べながらやるわけ。

で、まあもしかしたら誰かの参考になるかもしれないじゃんってことで、これからちょくちょく記事としてアップすることにした。

ちなみに僕はプログラミングが全然できない。先輩たちにももっと良い書き方がたくさんあると怒られてばっかりだ。

勉強中だ。ここで過去を振り返られるとなんか面白かったりするかもしれない。

 

使う言語はC++, 画像処理ライブラリとしてOpenCV,Visual Stadioで書いている。

画像はMat型で格納することにする。

 

最初の課題ということで、ソースコードと同じディレクトリにある任意の画像(違うディレクトリに置くならその絶対パスを示す)をグレースケールで読み込んで、表示するプログラム。

 

//画像をグレースケールで読み込んで表示、保存する
#include "opencv2\opencv.hpp"

int main()
{
//Mat型の構造(クラス)に画像を代入して初期化する.
std::string filename = "test.jpg";
cv::Mat input = cv::imread(filename, 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);

//画像の保存 保存したい名前、画像変数名
cv::imwrite("save.jpg", input);

//画像表示ウィンドウの作成
cv::namedWindow("グレースケール画像", CV_WINDOW_AUTOSIZE);

//画像の表示,第一引数はウィンドウの名前,第二引数は画像を格納したMat型インスタンス
cv::imshow("グレースケール画像", input);

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

//ウィンドウの破棄
cv::destroyWindow("グレースケール画像");

return 0;

}

 

以上。