Hi everyone, my different codes to detect circles do work well on single images but for my application i would need to apply it to a video frame (image extracted from a videoCapture). Basicly what i do is to get the video frame and simply place it where i used to have my source from a simple "imread(..)". But what happens is that after all the filtering and processing,imshow returns the normal capture, and i would like the circles to be drawn.
this is my code:
VideoCapture video(0);
Mat videoFrame;
Mat cannyOutput,imgBW;
vector<Vec4i> hierarchy;
vector<vector<Point> > contours;
vector<Moments> muCercle;
vector<Point2f> mcCercle;
if (video.isOpened() == false ){
std::cout<<"Erreur ouverture video"<<std::endl;
}
while(! ( (cv::waitKey(1)) == 'q' ) ){
//recupere la videoFrame
video >> videoFrame;
/// Convert it to gray
cvtColor( videoFrame, imgBW, CV_BGR2GRAY );
/// Reduce the noise so we avoid false circle detection
GaussianBlur(imgBW, imgBW, Size(9, 9), 2, 2 );
vector<Vec3f> circles;
/// Apply the Hough Transform to find the circles
HoughCircles(imgBW, circles, CV_HOUGH_GRADIENT, 1, imgBW.rows/8, 200, 100, 0, 0 );
/// Draw the circles detected
for( size_t i = 0; i < circles.size(); i++ )
{
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
// circle center
circle( videoFrame, center, 3, Scalar(0,255,0), -1, 8, 0 );
// circle outline
circle( videoFrame, center, radius, Scalar(0,0,255), 3, 8, 0 );
}
/// Show your results
namedWindow("w", CV_WINDOW_AUTOSIZE );
imshow("w", videoFrame );
cv::waitKey(10);
}//tant que non stop
cvDestroyAllWindows();
video.release();
I tried to use more delay but it didn't change anything, it doesn't seem to be a processing problem. I also tried to put the "video >> videoFrame" (acquire the image extracted from the video) out of the infinite loop so i get a simple image and just treat it, didn't fix it either. I think i'm doing something wrong with probably: a Mat or Array being output-input in one of all these functions or probably video >> videoFrame is doing something wrong.
Any ideas?