以下のコードから受け取った円の太さを検出しようとしていますが、検出できません。
私の基本的な考え方は、円の中を移動することです。任意の点で厚さが反対側よりも小さい場合、それは不良円であることを意味します。
これを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);
この後、輪郭を見つける必要があることはわかっていますが、円の厚さを取得し、円を移動して欠陥のある円を取得するにはどうすればよいですか? ピクセル数を取得して欠陥のある円を検出したくない...
上記のコードを実行すると、この画像が表示されます