C++ 识别圆圈
下面给出的代码用于识别视频提要中的圆圈。for循环未执行。为什么会这样C++ 识别圆圈,c++,c,opencv,C++,C,Opencv,下面给出的代码用于识别视频提要中的圆圈。for循环未执行。为什么会这样 #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <opencv/cv.h> #include <iostream> #include <stdio.h> using namespace cv; int main(int argc, char** argv) {
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv/cv.h>
#include <iostream>
#include <stdio.h>
using namespace cv;
int main(int argc, char** argv)
{
CvCapture* capture=0;
capture=cvCaptureFromCAM(0);
if(!capture)
{
printf("Capture failure\n");
return -1;
}
IplImage* frame;
while(true)
{
frame=cvQueryFrame(capture);
if(!frame) break;
Mat src(frame);
IplImage* framegray=cvCreateImage(cvGetSize(frame),8,3);
Mat srcgray(framegray);
cvtColor(src,srcgray,CV_BGR2GRAY);
GaussianBlur(srcgray,srcgray,Size(9, 9), 2, 2 );
vector<Vec3f> circles;
HoughCircles( srcgray, circles, CV_HOUGH_GRADIENT, 1, srcgray.rows/8, 200, 100, 0, 0 );
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( src, center, radius, Scalar(0,255,0), 3, 8, 0 );
}
namedWindow( "Hough Circle Transform Demo", CV_WINDOW_AUTOSIZE );
imshow( "Hough Circle Transform Demo", src );
int c=cvWaitKey(10);
if(char(c)==27)
break;
}
return 0;
}
#包括“opencv2/highgui/highgui.hpp”
#包括“opencv2/imgproc/imgproc.hpp”
#包括
#包括
#包括
使用名称空间cv;
int main(int argc,字符**argv)
{
CvCapture*capture=0;
捕获=cvCaptureFromCAM(0);
如果(!捕获)
{
printf(“捕获失败\n”);
返回-1;
}
IplImage*框架;
while(true)
{
帧=cvQueryFrame(捕获);
如果(!帧)中断;
垫式src(框架);
IplImage*framegray=cvCreateImage(cvGetSize(frame),8,3);
灰色(框灰色);
CVT颜色(src、srcgray、CV_BGR2GRAY);
高斯模糊(srcgray,srcgray,大小(9,9,2,2));
矢量圆;
HoughCircles(srcgray,circles,CV_HOUGH_GRADIENT,1,srcgray.rows/8,200,100,0,0);
对于(size_t i=0;i
不使用摄像机时,用于测试程序的图像样本如下所示:|
尝试您的代码它与您的测试映像一起工作。我把代码改成了不使用iPLIGION的C++ + OpenCV语法。
void identifyCircles()
{
cv::Mat src = cv::imread("identifyCircles2.png");
cv::Mat srcgray;
cv::cvtColor(src,srcgray,CV_BGR2GRAY);
cv::GaussianBlur(srcgray,srcgray,Size(9, 9), 2, 2 );
std::vector<cv::Vec3f> circles;
cv::HoughCircles( srcgray, circles, CV_HOUGH_GRADIENT, 1, srcgray.rows/8, 200, 100, 0, 0 );
for( size_t i = 0; i < circles.size(); i++ )
{
cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
circle( src, center, radius, cv::Scalar(0,255,0), 3, 8, 0 );
}
cv::namedWindow( "Hough Circle Transform Demo", CV_WINDOW_AUTOSIZE );
cv::imshow( "Hough Circle Transform Demo", src );
cv::imwrite("houghCirclesIdentified.png",src);
cv::waitKey(-1);
}
void identificationcircles()
{
cv::Mat src=cv::imread(“identificircles2.png”);
cv::灰色;
cv::cvtColor(src、srcgray、cv_BGR2GRAY);
cv::高斯蓝(srcgray,srcgray,大小(9,9,2,2);
std::向量圆;
cv::HoughCircles(srcgray,circles,cv_HOUGH_GRADIENT,1,srcgray.rows/82000,100,0,0);
对于(size_t i=0;i
给我输出:
因此,您的问题可能是视频流输入,那里的圆圈可能不够“好”。或者您的图像流传输不正确(是否显示图像?!?)
如果未输入循环的
for
,circles.size()正在尝试代码,它可以与测试图像一起工作。我把代码改成了不使用iPLIGION的C++ + OpenCV语法。
void identifyCircles()
{
cv::Mat src = cv::imread("identifyCircles2.png");
cv::Mat srcgray;
cv::cvtColor(src,srcgray,CV_BGR2GRAY);
cv::GaussianBlur(srcgray,srcgray,Size(9, 9), 2, 2 );
std::vector<cv::Vec3f> circles;
cv::HoughCircles( srcgray, circles, CV_HOUGH_GRADIENT, 1, srcgray.rows/8, 200, 100, 0, 0 );
for( size_t i = 0; i < circles.size(); i++ )
{
cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
circle( src, center, radius, cv::Scalar(0,255,0), 3, 8, 0 );
}
cv::namedWindow( "Hough Circle Transform Demo", CV_WINDOW_AUTOSIZE );
cv::imshow( "Hough Circle Transform Demo", src );
cv::imwrite("houghCirclesIdentified.png",src);
cv::waitKey(-1);
}
void identificationcircles()
{
cv::Mat src=cv::imread(“identificircles2.png”);
cv::灰色;
cv::cvtColor(src、srcgray、cv_BGR2GRAY);
cv::高斯蓝(srcgray,srcgray,大小(9,9,2,2);
std::向量圆;
cv::HoughCircles(srcgray,circles,cv_HOUGH_GRADIENT,1,srcgray.rows/82000,100,0,0);
对于(size_t i=0;i
给我输出:
因此,您的问题可能是视频流输入,那里的圆圈可能不够“好”。或者您的图像流传输不正确(是否显示图像?!?)
如果未输入循环的for
,circles.size()正在尝试代码,它可以与测试图像一起工作。我把代码改成了不使用iPLIGION的C++ + OpenCV语法。
void identifyCircles()
{
cv::Mat src = cv::imread("identifyCircles2.png");
cv::Mat srcgray;
cv::cvtColor(src,srcgray,CV_BGR2GRAY);
cv::GaussianBlur(srcgray,srcgray,Size(9, 9), 2, 2 );
std::vector<cv::Vec3f> circles;
cv::HoughCircles( srcgray, circles, CV_HOUGH_GRADIENT, 1, srcgray.rows/8, 200, 100, 0, 0 );
for( size_t i = 0; i < circles.size(); i++ )
{
cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
circle( src, center, radius, cv::Scalar(0,255,0), 3, 8, 0 );
}
cv::namedWindow( "Hough Circle Transform Demo", CV_WINDOW_AUTOSIZE );
cv::imshow( "Hough Circle Transform Demo", src );
cv::imwrite("houghCirclesIdentified.png",src);
cv::waitKey(-1);
}
void identificationcircles()
{
cv::Mat src=cv::imread(“identificircles2.png”);
cv::灰色;
cv::cvtColor(src、srcgray、cv_BGR2GRAY);
cv::高斯蓝(srcgray,srcgray,大小(9,9,2,2);
std::向量圆;
cv::HoughCircles(srcgray,circles,cv_HOUGH_GRADIENT,1,srcgray.rows/82000,100,0,0);
对于(size_t i=0;i
给我输出:
因此,您的问题可能是视频流输入,那里的圆圈可能不够“好”。或者您的图像流传输不正确(是否显示图像?!?)
如果未输入循环的for
,circles.size()正在尝试代码,它可以与测试图像一起工作。我把代码改成了不使用iPLIGION的C++ + OpenCV语法。
void identifyCircles()
{
cv::Mat src = cv::imread("identifyCircles2.png");
cv::Mat srcgray;
cv::cvtColor(src,srcgray,CV_BGR2GRAY);
cv::GaussianBlur(srcgray,srcgray,Size(9, 9), 2, 2 );
std::vector<cv::Vec3f> circles;
cv::HoughCircles( srcgray, circles, CV_HOUGH_GRADIENT, 1, srcgray.rows/8, 200, 100, 0, 0 );
for( size_t i = 0; i < circles.size(); i++ )
{
cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
circle( src, center, radius, cv::Scalar(0,255,0), 3, 8, 0 );
}
cv::namedWindow( "Hough Circle Transform Demo", CV_WINDOW_AUTOSIZE );
cv::imshow( "Hough Circle Transform Demo", src );
cv::imwrite("houghCirclesIdentified.png",src);
cv::waitKey(-1);
}
void identificationcircles()
{
cv::Mat src=cv::imread(“identificircles2.png”);
cv::灰色;
cv::cvtColor(src、srcgray、cv_BGR2GRAY);
cv::高斯蓝(srcgray,srcgray,大小(9,9,2,2);
std::向量圆;
cv::HoughCircles(srcgray,circles,cv_HOUGH_GRADIENT,1,srcgray.rows/82000,100,0,0);
对于(size_t i=0;i