【OpenCV】ピクセルにアクセスするサンプル

画像を読み込むと、画像のピクセル単位で処理したくなることがあります。
というわけで、書いてみるテスト
Mat型の変数に格納した画像データのピクセルに対して、アクセスするプログラムを書いてみました。

OpenCVのバージョンは、2.2
Xcodeのバージョンは、3.2.3 64bitです。

#include <iostream>
#include <opencv2/opencv.hpp>
 using namespace cv;
 using namespace std;

int main () {
	Mat img = imread("../image/lena.png");//画像を読み込む
	Mat red_img;

	img.copyTo(red_img);//imgの内容をred_imgにコピー

	for(int y=0;y<red_img.rows;y++){
		for (int x=0; x<red_img.cols; x++) {
			red_img.ptr<uchar>(y)[3*x] = 0; //Blueを0
			red_img.ptr<uchar>(y)[3*x+1] = 0; //Greenを0
			//red_img.ptr<uchar>(y)[3*x+2] = 0;//Red
		}
	}

	imshow("lena",img);
	imshow("red_lena", red_img);
	waitKey(0);

	return 1;
}

 

 

実行結果は下の通り
result_image

 

意外とシンプルにアクセスすることができます。これもC++インターフェースの賜物?
imread関数を用いて画像を読み込む場合、特にオプションを付けないと3チャンネルカラー画像として読み込まれます。
3チャンネルのカラー画像の場合、BGRの順でデータが並んでいるので注意する必要があります。
(なお、img.at<uchar>(i,j)=0のようなやり方もありますが試してはいません。)

参考になりそうな過去ページ
【OpenCV】XcodeでOpenCVを用いたプロジェクトの構築

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です