私はテキスト認識に手を入れたかったので、opencvを使ってエッジをトレースし、C++を使ってスロープやカーブなどを見つけました。エッジアルゴリズムは大きくて整理されたセットしかし、それは苦労して不完全に見える、私の推測は私がしきい値を正しく設定していないと成功していない別の値を試していたことだった。ここで Cannyエッジアルゴリズムのしきい値を調整する
は私のコードです:私は、ネット全体で見てきたし、このサイトからこのコードのようにいくつかの複雑なしきい値条件を見てきました#include "cv.h"
#include "highgui.h"
using namespace cv;
const int low_threshold = 50;
const int high_threshold = 150;
int main()
{
IplImage* newImg;
IplImage* grayImg;
IplImage* cannyImg;
newImg = cvLoadImage("ocv.bmp",1);
grayImg = cvCreateImage(cvSize(newImg->width, newImg->height), IPL_DEPTH_8U, 1);
cvCvtColor(newImg, grayImg, CV_BGR2GRAY);
cannyImg = cvCreateImage(cvGetSize(newImg), IPL_DEPTH_8U, 1);
cvCanny(grayImg, cannyImg, low_threshold, high_threshold, 3);
cvNamedWindow ("Source", 1);
cvNamedWindow ("Destination",1);
cvShowImage ("Source", newImg);
cvShowImage ("Destination", cannyImg);
cvWaitKey(0);
cvDestroyWindow ("Source");
cvDestroyWindow ("Destination");
cvReleaseImage (&newImg);
cvReleaseImage (&grayImg);
cvReleaseImage (&cannyImg);
return 0;
}
:
% Set direction to either 0, 45, -45 or 90 depending on angle.
[x,y]=size(f1);
for i=1:x-1,
for j=1:y-1,
if ((gradAngle(i,j)>67.5 && gradAngle(i,j)<=90) || (gradAngle(i,j)>=-90 && gradAngle(i,j)<=-67.5))
gradDirection(i,j)=0;
elseif ((gradAngle(i,j)>22.5 && gradAngle(i,j)<=67.5))
gradDirection(i,j)=45;
elseif ((gradAngle(i,j)>-22.5 && gradAngle(i,j)<=22.5))
gradDirection(i,j)=90;
elseif ((gradAngle(i,j)>-67.5 && gradAngle(i,j)<=-22.5))
gradDirection(i,j)=-45;
end
end
end
これがtの場合彼の解決策は誰かが私にこのアルゴリズムと同等のC++を提供することができます、それ以外の場合はどうすればいいですか?
私はopenCVを使用していませんが、最初にキャニーエッジ検出器のsigmaパラメータで再生することもできます。 – WebMonster
これらの値は、勾配の大きさ画像のヒストグラムから計算する必要があります。 –