現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::基本編07
INDEXOpenCV::基本編06 << OpenCV::基本編07 >> OpenCV::基本編08

フィルタ



― フィルタを使う手順 ―
  1. フィルタを作成
  2. cvFilter2D()関数で、フィルタリング

[1]:フィルタを作成する


フィルタを作成するというのは、単なる行列を作成する事である。

例えば
[ 0 1 0]
[ 1 1 1]
[ 0 1 0]
というフィルタを作る場合は


float FilterData[]=
{
	0,  1,  0,
	1,  1,  1,
	0,  1,  0
}

CvMat kernel = cvMat (3, 3, CV_32F, FilterData); // (縦3×横3), float型, FilterDataのデータを使う

となる。

[2]:フィルタリング


フィルターをかけるには、cvFilter2D関数を使う。
例えば
[1     2    3    4]
[5     6    7    8]
[9    10  11  12]
[13  14  15  16]
という行列に対し、先ほど作ったフィルタを適用する場合以下のようになる。


#include <iostream>
#include <algorithm>
#include <cv.h>

//サンプル行列
float data[]=
{
	1,2,3,4,
	5,6,7,8,
	9,10,11,12,
	13,14,15,16
};

//フィルタ用データ
float filter[]=
{
	0,1,0,
	1,1,1,
	0,1,0
};

int main(int argc,char*argv[])
{

	CvMat Input = cvMat (4, 4, CV_32F, data); //縦4 横4
	CvMat kernel = cvMat (3, 3, CV_32F, filter); //縦3 横3

	cvFilter2D (&Input, &Input, &kernel, cvPoint (-1, -1));

	std::copy(Input.data.fl,Input.data.fl+16,std::ostream_iterator<float>(std::cout,"\n"));

	return EXIT_SUCCESS;

}


メモ


行列データの端はフィルタがはみ出る。
この時は、注目ピクセルから補間された値が用いられる。

double型(CV_64F)はサポートされていないようだ。



サンプルコード OpenCV::フィルタリング

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます