【OpenCV】自作フィルタ〜ラプラシアン編〜

実はOpenCVで自作のフィルタを扱うにはどうすればいいんだろう
ということで、ためにしにラプラシアンフィルタを作ってみた。
(ラプラシアンフィルタ自体はOpenCVに関数としてある。)

ラプラシアンフィルタは二次微分することで、画像のエッジを目立たせるフィルタです。

OpenCVで自作のフィルタを作る場合、適当にマスクパターンを作る。
その後、filter2D関数に投げればいいみたい

というわけで以下ソース

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

using namespace cv;
using namespace std;

int main () {

    Mat img = imread("./image/lena.jpg");//適当な画像でOK
    Mat gry,dst;

    img.copyTo(dst);
    img.copyTo(gry);

    //ラプラシアンフィルタのマスクパターン
    unsigned char lap[3][3] = {{0,1,0},
                                {1,-4,1},
                                {0,1,0}};    
    Mat filter(Size(3,3), CV_8S,lap);

    //グレイスケールに変更
    cvtColor(img, gry, CV_BGR2GRAY);

    //フィルタ処理
    filter2D(gry, dst, img.depth(), filter);

    imshow("src",img);
    imshow("gry",gry);
    imshow("dst",dst);

    waitKey(0);
    return 1;
}

 

実行結果

左が原画像、中がグレイスケール、右がラプラシアンフィルタをかけた結果です。

ちなみに環境は、MacOSX10.7(Lion)、Xcode4.1、OpenCV2.2で実行をしています。

Mat型を使うとすっきりかけますね。非常にらくちんらくちん。

とりあえず基本的な自作フィルタの作り方は理解完了。
次はちょっとこったフィルタにでも挑戦してみよう。

 

コメントを残す

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