月別アーカイブ: 2011年5月

【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を用いたプロジェクトの構築

【OpenCV】背景差分をMat型を使ってやってみた

Mat型を使った背景差分のプログラムを勉強がてら作ってみた。
ちょっとMat型の変数の数が、無駄に多い気がする。
そんなソースで大丈夫か?

大丈夫だ問題ない(動作的意味で)

 


背景画像


USBカメラ画像


背景差分の結果

 

以下、ソースコード

#include <iostream>
#include "opencv2/opencv.hpp"

using namespace cv;
using namespace std;

int main () {
	VideoCapture cap(0);

	Mat frm,bg,dst,diff,gry;

	//閾値
	const char th = 20; 

	//背景画像を取得 スペースで背景画像取得
	while (waitKey(1) != 32) {
		cap >> frm;
		frm.copyTo(bg);
		imshow("bg", bg);
	}

	while(waitKey(1) != 27){
		cap >> frm;

		absdiff(frm,bg,diff);//背景画像との差分を取得
		cvtColor(diff,gry,CV_BGR2GRAY);//差分画像をグレイスケールに
		threshold(gry, dst, th, 255, THRESH_BINARY);//二値化画像化

		imshow("dst",dst);
		imshow("frm",frm);
	}
}

 

参考になりそうな過去ページ
【OpenCV】XcodeでOpenCVを用いたプロジェクトの構築
【OpenCV】USBカメラからキャプチャするサンプル

【OpenCV】Xcode3.xでOpenCVを用いたプロジェクトの構築

OpenCVを用いたプログラムはそこそこ作る。
でもXcodeでのプロジェクト構築法をよく忘れてしまいます・・・

というわけで、忘備録として残しておきます。

Xcodeのバージョン 3.2.3 64bit
Macのバージョン 10.6.7
OpenCVのバージョン 2.2

1.メニューから新規プロジェクト→Command Line Tool→選択

適当な名前◯×△をつけて、プロジェクトを作成

2.メニューからプロジェクト→アクティブターゲット”◯×△”を編集 を開く

3.以下の画像のように、OpenCVのヘッダファイルとライブラリのパスを設定
Mac Portsでインストールした場合、/opt/local/include      /opt/local/lib

4.プロジェクト→プロジェクトの追加 から必要なライブラリをプロジェクトに追加
とりあえず/opt/local/lib/にある以下のライブラリをプロジェクトに追加
・libopencv_core.2.2.0.dylib
・libopencv_highgui.2.2.0.dylib
・libopencv_imgproc.2.2.0.dylib
必要に応じて、OpenCVのライブラリを追加

ちゃんとプロジェクトが構築されているかどうかをサンプルを利用して確認する。
USBカメラからキャプチャするサンプル