最終更新: mikk_ni3_92 2007年12月20日(木) 13:03:01履歴
現在地 >> メニュー >> サンプルコード::OpenCV >> エッジ検出 >> エッジ検出2
以下の画像をグレイスケールで読み込んで、ソーベルフィルタをかけよ。
その他条件:
出力のスケール変換は関数を「cvConvert関数」を用いる。
cvConvertScaleAbs()、cvConvertScale()の結果を比べる。
画像
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
int main( int argc, char **argv)
{
IplImage *imgA = cvLoadImage( "test3.jpg", CV_LOAD_IMAGE_GRAYSCALE);
if(imgA ==NULL)
{
cout<<"Can't Load Image ." << endl;
std::exit(0);
}
IplImage *tmp = cvCreateImage(cvGetSize(imgA),IPL_DEPTH_16S,1);
/* 絶対値 ver.*/
cvSobel (imgA, tmp, 0, 1);
cvConvertScaleAbs(tmp, imgA);
cvNamedWindow("abs convert",CV_WINDOW_AUTOSIZE);
cvShowImage("abs convert",imgA);
/* 通常 ver.*/
cvConvertScale(tmp, imgA);
cvNamedWindow("nomal convert",CV_WINDOW_AUTOSIZE);
cvShowImage("nomal convert",imgA);
cvReleaseImage(&tmp);
cvReleaseImage( &imgA );
cvWaitKey(0); // 0秒待つ => ずっと入力待ち
cvDestroyWindow("window");
return 0;
}
「エッジ検出」は、「Sobel」、「Laplacian」、「Canny」の3種類ある。
このうち、処理の都合上、
「Sobel」、「Laplacian」は「IPL_DEPTH_16S」(符号付16ビット整数)
の「tmp変数(IplImage)」が必要。
データの「16ビット表現」から「8ビット表現」への「スケール変換」は、
「cvConvert関数」を用いる。
http://opencv.jp/opencv/document/opencvref_cxcore_...
以下の画像をグレイスケールで読み込んで、ソーベルフィルタをかけよ。
その他条件:
出力のスケール変換は関数を「cvConvert関数」を用いる。
cvConvertScaleAbs()、cvConvertScale()の結果を比べる。
画像
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
int main( int argc, char **argv)
{
IplImage *imgA = cvLoadImage( "test3.jpg", CV_LOAD_IMAGE_GRAYSCALE);
if(imgA ==NULL)
{
cout<<"Can't Load Image ." << endl;
std::exit(0);
}
IplImage *tmp = cvCreateImage(cvGetSize(imgA),IPL_DEPTH_16S,1);
/* 絶対値 ver.*/
cvSobel (imgA, tmp, 0, 1);
cvConvertScaleAbs(tmp, imgA);
cvNamedWindow("abs convert",CV_WINDOW_AUTOSIZE);
cvShowImage("abs convert",imgA);
/* 通常 ver.*/
cvConvertScale(tmp, imgA);
cvNamedWindow("nomal convert",CV_WINDOW_AUTOSIZE);
cvShowImage("nomal convert",imgA);
cvReleaseImage(&tmp);
cvReleaseImage( &imgA );
cvWaitKey(0); // 0秒待つ => ずっと入力待ち
cvDestroyWindow("window");
return 0;
}
「エッジ検出」は、「Sobel」、「Laplacian」、「Canny」の3種類ある。
このうち、処理の都合上、
「Sobel」、「Laplacian」は「IPL_DEPTH_16S」(符号付16ビット整数)
の「tmp変数(IplImage)」が必要。
データの「16ビット表現」から「8ビット表現」への「スケール変換」は、
「cvConvert関数」を用いる。
http://opencv.jp/opencv/document/opencvref_cxcore_...