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;
}
現在のアプリケーションの入力画像と出力画像を共有するだけで、質問の質が向上するだけでなく、回答を得る機会も増えます。あなたの質問によくタグを付けてください。 ** ** C **のメンバーはおそらくこのようにタグ付けされていないので、おそらくこの質問がありません。 – karlphillip
[OpenCVと機械学習を使った簡単なオブジェクト検出]の複製が可能です。(http://stackoverflow.com/questions/6416117/simple-object-detection-using-opencv-and-machine-learning) – karlphillip
おそらく、 [openCVで特定の色(またはグレイレベル)の円を検出する](http://stackoverflow.com/questions/3198237/detecting-a-circle-of-a-specific-color-or-gray-level-with -opencv) – karlphillip