椭圆轮廓识别

首先,从图像中检测出轮廓,然后再从轮廓中检索出椭圆轮廓。参考代码如下所示:

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

int main(int argc, char *argv[]){
  cv::Mat src_img = cv::imread("test.jpg", 1);
  if(src_img.empty()) return -1; 

  cv::Mat gray_img, bin_img;
  cv::cvtColor(src_img, gray_img, CV_BGR2GRAY);

  std::vector<std::vector<cv::Point> > contours;

  cv::threshold(gray_img, bin_img, 0, 255, cv::THRESH_BINARY|cv::THRESH_OTSU);// 图像的二值化
  cv::findContours(bin_img, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);// 轮廓检测

  for(int i = 0; i < contours.size(); ++i) {
    size_t count = contours[i].size();
    if(count < 100 || count > 1000) continue; // (过大或过小)排除轮廓

    cv::Mat pointsf;
    cv::Mat(contours[i]).convertTo(pointsf, CV_32F);

    cv::RotatedRect box = cv::fitEllipse(pointsf);// 椭圆形匹配
    cv::ellipse(src_img, box, cv::Scalar(0,0,255), 2, CV_AA);// 绘制出椭圆
  }

  cv::namedWindow("fit ellipse", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
  cv::namedWindow("bin image", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
  cv::imshow("fit ellipse", src_img);
  cv::imshow("bin image", bin_img);
  cv::waitKey(0);
}

关于Image Engineering& Computer Vision更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.

椭圆轮廓识别

时间: 2024-08-03 13:44:36

椭圆轮廓识别的相关文章

智能识别 识别轮廓

精明的检测??轮廓识别.

Hough变换检测椭圆

 由椭圆的公式(1)可得,确定一个椭圆需要5个参数,a,b 为椭圆的长轴和段轴,P,Q 为椭圆中心坐标,θ为椭圆的旋转角度.如果用传统的Hough变换方法,参数空间需要五维.这种方法在计算过程中所耗费的时间和空间资源是惊人的,根本无法应用于实际.为此,人们提出了很多新的改进算法. 改进算法主要分为两种: 1)随机Hough变换(RHT),采用多到一的映射,但是随机采样会带来大量无效的计算,当点数很大时,算法的性能急剧下降. 2)利用椭圆的几何特征降低参数的维度. 本文所提出的椭圆检测方法也是基于

车牌识别(一)-车牌定位

在对车牌识别过程中,常用的方法有:基于形状.基于色调.基于纹理.基于文字特征等方法.首先基于形状,在车牌中因为车牌为形状规格的矩形,所以目的转化为寻找矩形特征,常常是利用车牌长宽比例特征.占据图像的比例等.基于色调,国内的车牌往往是蓝底白字,可以采用图像的色调或者饱和度特征,进入生成二值图,定位车牌位置.基于纹理特征自己还没有基础到.基于文字特征往往是根据文字轮廓特征进行识别,原理是基于相邻文字轮廓特征.比例进行定位车牌位置. 一.图像二值化 正如前面文章所言,首先进行获取图像二值化特征,本文采

python-opencv-圆、椭圆与任意多边形的绘制

圆形的绘制 : OpenCV中使用circle(img,center,radius,color,thickness=None,lineType=None,shift=None)函数来绘制圆形 import cv2 import numpy as np image=np.zeros((400,400,3),np.uint8) cv2.circle(image,(200,200),50,(0,0,255),2) #画圆 ''' 参数2 center:必选参数.圆心坐标 参数3 radius:必选参数

dlib人脸识别

dlib人脸识别 1.dlib安装 ? 代码的编写在jupyter notebook中来完成 ? jupyter notebook是一个工具 ? pip install jupyter ------------>安装使用 ? 如何启动: ? 命令行输入:jupyter notebook ? 前提,环境变量配置成功 ? ? dlib安装-------------> pip install dlib ? dlib有不同的版本,最新版本(19.17.0),经过测试,dll包不完备,所以上次我在使用时

Python下opencv使用笔记(二)(简单几何图像绘制)

简单几何图像一般包括点.直线.矩阵.圆.椭圆.多边形等等.首先认识一下opencv对像素点的定义.图像的一个像素点有1或者3个值,对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值,他们表现出不同的颜色. 那么有了点才能组成各种多边形. (一)首先绘制直线 函数为:cv2.line(img,Point pt1,Point pt2,color,thickness=1,line_type=8 shift=0) 有值的代表有默认值,不用给也行.可以看到这个函数主要接受参数为两个点的坐标,线的颜色

最近的心路历程非常之多

1.<老王和他的IT界朋友>能给我们带来什么 最近的心路历程非常之多,每次到了每年的这个时候,我总喜欢停下来,好好写写东西,感觉越来越力不从心.看到之前写的东西,总是很惊讶那样的文字也会出自我手. 最近姥爷有点身体不适,我推着他跑了跑医院,这才知道我们每个人其实都不是自己所想象的那样,并不是自己所想象的那样健康,我想做一个公众号,或者说一个订阅号,默默的记录我们身边的IT界人的心路历程,希望透过我们并不是很幼稚的文字记录自己的成长,同时给予其他看到这些文字的人 ,看到这些文字的攻城狮,程序员.

视频瞳孔跟踪之星团模型

1.预处理 1.1去除图像噪声 使用5*5的高斯平滑处理散粒噪声: 使用 模型处理线路噪声, 是第 i 帧图像,第 l 行像素的平均值,=0.2.当i=1时,C(i, l)  = : Adjustment = C (i, l) - Pixel (i, l, c) = Adjustment + Pixel (i, l, c)           Pixel (i, l, c) 是第 i 帧图像,坐标点为(l,c)的像素值. 3.  使用线性插值法去除角膜上的反光点. 2.瞳孔中心定位(核心算法)

机器学习系列:(三)特征提取与处理

特征提取与处理 上一章案例中的解释变量都是数值,比如匹萨的直接.而很多机器学习问题需要研究的对象可能是分类变量.文字甚至图像.本章,我们介绍提取这些变量特征的方法.这些技术是数据处理的前提--序列化,更是机器学习的基础,影响到本书的所有章节. 分类变量特征提取 许多机器学习问题都有分类的.标记的变量,不是连续的.例如,一个应用是用分类特征比如工作地点来预测工资水平.分类变量通常用独热编码(One-of-K or One-Hot Encoding),通过二进制数来表示每个解释变量的特征. 例如,假