Gam*_*ing 5 c++ algorithm opencv image-processing edge-detection
我想尝试文本识别,所以我使用opencv来查找边缘和c ++以找到斜率,曲线等,边缘算法适用于大而整齐的字符组但是当它出现在小字体上时或者有很多背景噪音的文字,如嵌入在验证码中,它会挣扎并且看起来不完整,我的猜测是我没有正确设置阈值并尝试不同的值而没有成功.
这是我的代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
我已经浏览了网络并看到了一些复杂的阈值条件,例如本网站的代码:
% 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
Run Code Online (Sandbox Code Playgroud)
如果这是解决方案可以有人为我提供此算法的c ++等价物,如果它不是我能做什么?
归档时间: |
|
查看次数: |
10876 次 |
最近记录: |