Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 识别圆圈_C++_C_Opencv - Fatal编程技术网

C++ 识别圆圈

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) {

下面给出的代码用于识别视频提要中的圆圈。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)
{
    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