その後画像に対する基本処理の説明を一通り読んで、
- カラー画像をグレースケール画像に変換
- カラー画像の赤要素のチャンネルのみを抽出
を行うプログラムを書いてみた。画像の読込、表示、ファイル出力、ピクセル値の参照、ピクセル値の変更という基本的なことは出来るようになった。
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" using namespace cv; int main (int argc, char** argv ) { Mat src = imread("img/lena.jpg"); Mat dest; int height = src.size().height; int width = src.size().width; /// convert to gray scale cvtColor(src, dest, CV_BGR2GRAY); // Now dest has 1 channel. namedWindow("gray", CV_WINDOW_AUTOSIZE); imshow("gray", dest); waitKey(); imwrite("gray.jpg", dest); /// extract only red channel dest = src.clone(); // Now dest has 3 channels. for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { dest.at<Vec3b>(y, x)[0] = 0; // blue dest.at<Vec3b>(y, x)[1] = 0; // green dest.at<Vec3b>(y, x)[2] = src.at<Vec3b>(y, x)[2]; // red } } namedWindow("red", CV_WINDOW_AUTOSIZE); imshow("red", dest); waitKey(); imwrite("red.jpg", dest); return 0; }
以下ファイル出力された画像。
まず元ネタ。
次にグレースケールに変換した画像。
最後の赤チャネルのみを抽出した画像。
0 件のコメント:
コメントを投稿