我正在尝试从下面的代码中检测到我收到的圆圈的粗细,但我无法这样做。
我的基本想法是穿过圆圈,如果厚度小于另一边,则意味着它是一个缺陷的圆圈。
我在google上发现了这个,但我不知道如何把它放在代码中:
http://answers.opencv.org/question/28180/measuring-edge-thickness-using-opencv
代码:
IplImage* mainimg = cvLoadImage( "C:\\3.png",CV_LOAD_IMAGE_GRAYSCALE); //change the name (image.jpg) according to your Image filename.
if (!mainimg)
{
cout <<"Image can NOT Load!!!";
return 1;
}
IplImage* srcimg=cvCreateImage(cvGetSize(mainimg),mainimg->depth,1);
IplImage* inrangeimg=cvCreateImage(cvGetSize(mainimg),mainimg->depth,1);
IplImage* erodeimg=cvCreateImage(cvGetSize(mainimg),mainimg->depth,1);
IplImage* erodeimg1=cvCreateImage(cvGetSize(mainimg),mainimg->depth,1);
IplImage* subimg=cvCreateImage(cvGetSize(mainimg),mainimg->depth,1);
IplImage* finalimage=cvCreateImage(cvGetSize(mainimg),mainimg->depth,1);
IplImage* finalimage1=cvCreateImage(cvGetSize(mainimg),mainimg->depth,1);
cvAdaptiveThreshold(mainimg,srcimg,255,CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY,11,-23);
cvInRangeS(mainimg,cvScalar(50,50,50),cvScalar(255,255,255),inrangeimg);
cvErode(inrangeimg,erodeimg,0,8);
cvSub(inrangeimg,erodeimg,subimg,0);
cvAnd(srcimg,subimg,finalimage,0);
cvShowImage("final",finalimage);
cvWaitKey(0);
在此之后,我知道我需要找到轮廓但是如何获得圆的厚度并穿过圆圈以获得缺陷?我不想获得像素计数并检测缺陷圈...
当我运行上面的代码时,我得到了这个image
答案 0 :(得分:0)
我可以想到两个想法:
使用周边:
使用区域:
当然,第一种算法对颠簸更敏感,根据你的图像和其他条件,这可能是好事还是坏事。
答案 1 :(得分:0)