2013-10-26 66 views
0

我想探測在image.this圓圈是我試圖此檢測圖像中的圓圈的數量的代碼:enter image description here如何用openCV檢測圖像中的圓圈?

#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include <stdio.h> 

/** @function main */ 
int main(int argc, char** argv) 
{ 
    //load image from directory 
    IplImage* gray = cvLoadImage("comb.png",0); 


    // IplImage* gray = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1); 
    CvMemStorage* storage = cvCreateMemStorage(0); 

    //covert to grayscale 
    cvCvtColor(gray, gray, CV_RGB2GRAY); 

    // This is done so as to prevent a lot of false circles from being detected 
    cvSmooth(gray, gray, CV_GAUSSIAN, 7, 7); 

    IplImage* canny = cvCreateImage(cvGetSize(gray),IPL_DEPTH_8U,1); 
    //IplImage* rgbcanny = cvCreateImage(cvGetSize(gray),IPL_DEPTH_8U,3); 
    cvCanny(gray, canny, 10, 20, 3); 

    //detect circles 
    CvSeq* circles = cvHoughCircles(gray, storage, CV_HOUGH_GRADIENT, 1, gray->width/10); 

    if(circles->total>0) 
    printf("circles found: %d\n",circles->total); 
    else 
    printf("circles not found"); 


    return 0; 
} 

但會出現以下錯誤: - OpenCV的錯誤:斷言失敗(DST。 data == dst0.data)in cvCvtColor,file /OpenCV/OpenCV-2.4.3/modules/imgproc/src/color.cpp,line 3811 terminate拋出'cv :: Exception'實例後調用 what() :/OpenCV/OpenCV-2.4.3/modules/imgproc/src/color.cpp:3811:錯誤:(-215)dst.data == dst0.data在函數cvCvtColor

請告訴我我是什麼我的程序錯了,我正在使用ubuntu linux。

+0

*** [很好的例子](http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_circle/hough_circle.html)***一步一步。看起來好像你使用C++? – ryyker

+0

您顯示的代碼片段只有幾行,您的問題描述表示3811行異常。這是指你的代碼,還是他們庫的一部分?你的代碼在哪行中斷?這看起來像.lib(或.obj)不兼容與支持.dll – ryyker

+0

您是否嘗試過使用更大的圖像並更容易找到圓圈? – moooeeeep

回答

0

您打開gray作爲灰色圖像(cvLoadImage("comb.png",0),其中「0」表示「灰度」)。然後,您嘗試將此灰色框架從RGB轉換爲灰色,當然,由於您的圖像已經是灰色,因此無法工作。

只是一味註釋掉以下行:

//covert to grayscale 
cvCvtColor(gray, gray, CV_RGB2GRAY); 

順便說一句,你應該使用的

IplImage* gray = cvLoadImage("comb.png", CV_LOAD_IMAGE_GRAYSCALE); 

代替

IplImage* gray = cvLoadImage("comb.png", 0); 

也就是說清晰。