2012-03-16 13 views
0

私は赤い輪郭だけを検出し、これらの輪郭に形状検出アルゴリズムを実行して赤い円を得る方法を見つけるのに苦労していますが、赤い円を抽出して排除する方法はわかりません望ましくない残りの輪郭?ソースコード:形と色の円を見つける

#include "stdafx.h" 
#include"math.h" 
#include"conio.h" 
#include"cv.h" 
#include"highgui.h" 
#include"stdio.h" 
#include <math.h> 

int main() 
{ 
    int i,j,k; 
    int h,w,seuill,channels; 
    int seuilr, channelsr; 
    int temp=0; 
    uchar *data,*datar; 
    i=j=k=0; 
    IplImage *frame=cvLoadImage("Mon_image.jpg",1); 
    IplImage *result=cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1); 
    IplImage *gray=cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1); 
    cvCvtColor(frame, result, CV_BGR2GRAY); 

    //IplImage* gray; 
    cvNamedWindow("original",CV_WINDOW_AUTOSIZE); 
    cvNamedWindow("Result",CV_WINDOW_AUTOSIZE); 

    h = frame->height; 
    w = frame->width; 
    seuill =frame->widthStep; 
    channels = frame->nChannels; 
    data = (uchar *)frame->imageData; 


    seuilr=result->widthStep; 
    channelsr=result->nChannels; 
    datar = (uchar *)result->imageData; 

    for(i=0;i < (h);i++) 
    for(j=0;j <(w);j++) 
{  
if(((data[i*seuill+j*channels+2]) >(19+data[i*seuill+j*channels]))&& ((data[i*seuill+j*channels+2]) > (19+data[i*seuill+j*channels+1]))) 

      datar[i*seuilr+j*channelsr]=255; 

else 
    datar[i*seuilr+j*channelsr]=0; 
}  

     cvCanny(result,result, 50, 100, 3); 
      CvMemStorage* storage = cvCreateMemStorage(0); 
     CvSeq* circles = cvHoughCircles(result, storage, CV_HOUGH_GRADIENT, 1, 40.0, 100, 100,0,0); 

    cvShowImage("original",frame); 
    cvShowImage("Result",result); 
    cvSaveImage("result.jpg",result); 
    cvWaitKey(0); 
    cvDestroyWindow("original"); 
    cvDestroyWindow("Result"); 
return 0; 
} 
+0

現在のアプリケーションの入力画像と出力画像を共有するだけで、質問の質が向上するだけでなく、回答を得る機会も増えます。あなたの質問によくタグを付けてください。 ** ** C **のメンバーはおそらくこのようにタグ付けされていないので、おそらくこの質問がありません。 – karlphillip

+0

[OpenCVと機械学習を使った簡単なオブジェクト検出]の複製が可能です。(http://stackoverflow.com/questions/6416117/simple-object-detection-using-opencv-and-machine-learning) – karlphillip

+0

おそらく、 [openCVで特定の色(またはグレイレベル)の円を検出する](http://stackoverflow.com/questions/3198237/detecting-a-circle-of-a-specific-color-or-gray-level-with -opencv) – karlphillip

答えて

0

私はむしろ輪郭のあなたのセットで円を検出するために、RANSACアルゴリズムを使用しますが、ハフ変換にも作業を行います。 両方のプロセスの説明については、hereを参照してください。 MATLABのソリューションは、与えられた。

関連する問題