如何使用openCV检测图像中的圆?
我想检测图像中的圆。这是我尝试检测图像中圆数的代码:如何使用openCV检测图像中的圆?,c,opencv,C,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
#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;
}
#包括“opencv2/highgui/highgui.hpp”
#包括“opencv2/imgproc/imgproc.hpp”
#包括
/**@主功能*/
int main(int argc,字符**argv)
{
//从目录中加载图像
IplImage*gray=cvLoadImage(“comb.png”,0);
//IplImage*gray=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
CvMemStorage*storage=cvCreateMemStorage(0);
//隐到灰度
CVT颜色(灰色、灰色、CV_rgb2灰色);
//这样做是为了防止检测到大量假圆
cvSmooth(灰色、灰色、CV_高斯、7、7);
IplImage*canny=cvCreateImage(cvGetSize(灰色),IPL_深度_8U,1);
//IplImage*rgbcanny=cvCreateImage(cvGetSize(灰色),IPL_DEPTH_8U,3);
cvCanny(灰色,canny,10,20,3);
//检测圆
CvSeq*圆=cvHoughCircles(灰色,存储,CV_HOUGH_渐变,1,灰色->宽度/10);
如果(圆圈->总数>0)
printf(“找到的圆:%d\n”,圆->总数);
其他的
printf(“未找到圆”);
返回0;
}
但出现以下错误:-
OpenCV错误:cvCvtColor文件/OpenCV/OpenCV-2.4.3/modules/imgproc/src/color.cpp第3811行中的断言失败(dst.data==dst0.data)
在引发“cv::Exception”的实例后调用terminate
what():/OpenCV/OpenCV-2.4.3/modules/imgproc/src/color.cpp:3811:error:(-215)dst.data==dst0.data在函数cvCvtColor中
请告诉我这个程序有什么问题。我使用的是ubuntu linux。你打开的
是灰色图像(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);
那就更清楚了。一步一步。看起来好像你正在使用C++?你显示的代码片段只是几行长,你的问题描述说行3811异常。这是指您的代码,还是其库的一部分?你的代码在哪一行中断?。这看起来像是.lib(或.obj)与supporting.dll不兼容。是否尝试使用更大的图像和更容易找到的圆?是否检查了输入图像是否有效?不要使用OpenCV2.4的IPLIGIN格式,阅读新的C++示例