最終更新: mikk_ni3_92 2008年09月10日(水) 18:07:09履歴
現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::基本編07
INDEX: OpenCV::基本編06 << OpenCV::基本編07 >> OpenCV::基本編08
フィルタを作成するというのは、単なる行列を作成する事である。
例えば
CvMat kernel = cvMat (3, 3, CV_32F, FilterData); // (縦3×横3), float型, FilterDataのデータを使う
となる。
フィルターをかけるには、cvFilter2D関数を使う。
例えば
行列データの端はフィルタがはみ出る。
この時は、注目ピクセルから補間された値が用いられる。
double型(CV_64F)はサポートされていないようだ。
サンプルコード OpenCV::フィルタリング
INDEX: OpenCV::基本編06 << OpenCV::基本編07 >> OpenCV::基本編08
フィルタを作成するというのは、単なる行列を作成する事である。
例えば
[ 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のデータを使う
となる。
フィルターをかけるには、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::フィルタリング