初学OpenCV学习记录(六)

本文介绍了使用OpenCV进行图像处理,包括Canny算子检测轮廓,霍夫变换检测直线的基本原理和实现方法,以及如何提取连通区域的轮廓和计算形状描述符。
摘要由CSDN通过智能技术生成

以下内容摘自《OpenCV2计算机视觉编程手册》

引言

本章主要介绍了一种更优秀的检测轮廓的方法:Canny算子,如何使用霍夫变换检测直线、圆等形状,直线拟合,提取轮廓,计算连通区域形状描述符。

使用Canny算子检测轮廓

在前面我们已经使用过很多种方法检测图像的轮廓,前面的算法最后生成的二值轮廓图主要的问题在于二值化的过程中,如果阈值选的过低,则会检测出很多不重要的边缘,并且检测到的轮廓也过宽,不利于精确定位物体,如果阈值过高,则有可能忽略重要的边缘,使用Canny算法即可以很好的解决这个问题。
基本原理:算法基于Sobel算子,使用两个阈值,一个低阈值和一个高阈值对边缘进行筛选,低阈值的大小要能够识别出那些明显是图像轮廓的像素,高阈值要保证能够识别出我们需要的、重要的轮廓,并且排出异常值,算法会分别使用两个阈值生成两幅图片,然后,将两幅图片生成一幅最优的轮廓图,只要指定合适的阈值,那么就能够生成高质量的轮廓。
用法:

cv::Mat contours;
cv::Canny(image,contours,125,350);

正常情况下,输出的图片中轮廓是用非零像素表示的,为了方便显示我们将其翻转黑白值代码如下:

cv::Mat contoursInv;
cv::threshod(contours,contoursInv,128,255,cv::THRESH_BINARY_INV);

使用霍夫变换检测直线

使用Canny算法得到图像的轮廓以后,如果我们想检测轮廓中的直线就可以使用这种方法。
基本原理:
对于一个图像来说,以左上角为原点,图像中的直线可以定义为下式:
ρ = x c o s θ + y s i n θ \rho=xcos\theta+ysin\theta

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值