OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 6529|回复: 7

大神救我!!!怎么检测椭圆并输出椭圆圆心坐标!

[复制链接]
发表于 2017-9-9 21:35:26 | 显示全部楼层 |阅读模式
在不同角度拍的照片可能是圆或者椭圆,现在我只能检测到圆,椭圆怎么检测??能在一张图里面同时检测圆和椭圆吗??我在论坛、贴吧找了很久,程序总是出错,有的达不到我想要的结果!!!所有有大神可以帮我一下吗??附上您的程序~~~~太感谢了~~下面是我检测圆的程序以及结果!!!请大神帮我在一张图片里可以同时检测圆和椭圆!!没办法附图D://save.jpg


#include<highgui.h>
#include<cv.h>
#include<opencv2/imgproc/imgproc.hpp>
#include<math.h>
using namespace cv;
using namespace std;
int main(int argc,char**argv)
{
    IplImage*image=cvLoadImage("D://save.jpg",CV_LOAD_IMAGE_GRAYSCALE);
    CvMemStorage*storage=cvCreateMemStorage(0);
    cvSmooth(image,image,CV_GAUSSIAN,5,5);
    CvSeq*results=cvHoughCircles(image,storage,CV_HOUGH_GRADIENT,2,image->width/10);
   
    //依次在图中绘制出圆
    for(inti=0;i<results->total;i++)
    {
        float*p=(float*) cvGetSeqElem(results,i);
        CvPointpt=cvPoint(cvRound(p[0]),cvRound(p[1]));
        cvCircle( image,pt, 2,Scalar(0,255,0), -1, 8, 0 );
        cvCircle(image,pt,cvRound(p[2]), Scalar(0,0,255), 2, 8, 0 );
        //cvCircle(image,pt,cvRound(p[2]),CV_RGB(0xff,0xff,0xff));
     //在控制台输出圆心坐标和半径
        cout<<" \n圆心x  "<<cvRound(p[0])<<" \n圆心y  "<<cvRound(p[1])<<"  \n半径  "<<cvRound(p[2]);
    }
    //显示效果图
    cvNamedWindow("效果图",0);
    cvShowImage("效果图",image);
    waitKey(0);
   
}







回复

使用道具 举报

发表于 2017-9-10 12:29:58 | 显示全部楼层
你这是要把药片分开还是要准确提取每个药片的边缘?从实际应用角度来看,第一,外面的塑料壳带来很大麻烦,第二,你给的光照不行,如果选择合适的光照,可能会好一点,或者把第一点给解决掉。
还是那句话,不是随便拍张照片加上opencv就无敌了
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-9-9 21:41:47 | 显示全部楼层
这是我的图片,你们可以看一下~~


回复 支持 反对

使用道具 举报

发表于 2017-9-10 15:47:42 | 显示全部楼层
要在一张图片里在一张图里面同时检测圆和椭圆确实很困难,特别是两种图形区别不大时.....
回复 支持 反对

使用道具 举报

发表于 2017-9-10 15:47:48 | 显示全部楼层
要在一张图片里在一张图里面同时检测圆和椭圆确实很困难,特别是两种图形区别不大时.....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-11 10:07:11 | 显示全部楼层
lans625 发表于 2017-9-10 15:47
要在一张图片里在一张图里面同时检测圆和椭圆确实很困难,特别是两种图形区别不大时..... ...

不同角度拍的话可能会差别大或者差别不大,这个没法保证呢,我感觉也挺麻烦的,毕竟两个检测方法不太一样
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-11 10:10:17 | 显示全部楼层
bruce666 发表于 2017-9-10 12:29
你这是要把药片分开还是要准确提取每个药片的边缘?从实际应用角度来看,第一,外面的塑料壳带来很大麻烦, ...

我想要准确提取每个药片的边缘然后提取圆心坐标,第一点:因为我实际要做的类似这种都是圆形的东西,所以就拿药片代替了,本身是很硬的外壳的,只是现在还没做出来。第二点,我相机拍摄的图片就是这种不是彩色的。那么现在这个问题还能解决吗???谢谢您的回复和建议
回复 支持 反对

使用道具 举报

发表于 2017-9-11 14:47:43 | 显示全部楼层
试一下blob detect
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-18 12:26 , Processed in 0.010580 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表