のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

OpenCVの使い方(6) エッジ検出の手法

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気です。

今日はOpenCVでエッジ検出をやってみたよ。
OpenCVで用意されている関数では3つあります。SobelとLaplacianとCannyです。

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

using namespace std;
using namespace cv;

int main(int argc, char const *argv[]){
	Mat img = imread("Pepper.jpg",0);
	Mat sobel_img,laplacian_img,canny_img,temp_img;

	//Sobel
	Sobel(img,temp_img,CV_32F,1,1);
	convertScaleAbs(temp_img,sobel_img,1,0);

	//Laplacian
	Laplacian(img,temp_img,CV_32F,3);
	convertScaleAbs(temp_img,laplacian_img,1,0);

	//Canny
	Canny(img,canny_img,50,200);

	imshow("original_image",img);
	imshow("sobel_img",sobel_img);
	imshow("laplacian_img",laplacian_img);
	imshow("canny_img",canny_img);

	waitKey(0);
	return 0;
}

Sobel
画像の1次微分をした画像

Laplacian
画像の2次微分をした画像

Canny
エッジの検出と連続部のパラメータを与えるのだそうです。
因みに画像の値は0 or 255です

アルゴリズムの内容はまだ特に調べてないので、気が向いたら実装してみようかなと思っています。

Original Image
f:id:tereka:20141103121918j:plain

左から順番に Sobel Laplacian Cannyです。
f:id:tereka:20141103121926p:plainf:id:tereka:20141103121934p:plainf:id:tereka:20141103121939p:plain