当前位置: 首页 > news >正文

网站建设 系统维护河南网站推广公司

网站建设 系统维护,河南网站推广公司,网站建设的开多少税率,网上商城怎么开发OpenCV入门(十八)快速学会OpenCV 17 直线检测1.霍夫直线变换概述2.霍夫变换原理3.操作实例3.1 HoughLines函数3.2 HoughLinesP函数作者:Xiou 1.霍夫直线变换概述 霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。霍夫变换采用…

OpenCV入门(十八)快速学会OpenCV 17 直线检测

  • 1.霍夫直线变换概述
  • 2.霍夫变换原理
  • 3.操作实例
    • 3.1 HoughLines函数
    • 3.2 HoughLinesP函数

作者:Xiou

1.霍夫直线变换概述

霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。霍夫变换采用类似于投票的方式来获取当前图像内的形状集合,该变换由Paul Hough(霍夫)于1962年首次提出。最初的霍夫变换只能用于检测直线,经过发展后,霍夫变换不仅能够识别直线,还能识别其他简单的图形结构,常见的有圆、椭圆等。

霍夫直线变换用来在图像内寻找直线,在OpenCV中,可以用函数cv2.HoughLines()和函数cv2.HoughLinesP()实现。

霍夫变换 (Hough Line Transform) 是图像处理中的一种特征提取技术. 通过平面空间到极值坐标空间的转换, 可以帮助我们实现直线检测。

2.霍夫变换原理

为了方便说明问题,先以我们熟悉的笛卡儿坐标系(与笛卡儿空间对应)为例来说明霍夫变换的基本原理。与笛卡儿坐标系对应,我们构造一个霍夫坐标系(对应于霍夫空间)。在霍夫坐标系中,横坐标采用笛卡儿坐标系中直线的斜率k,纵坐标使用笛卡儿坐标系中直线的截距b。

首先,我们观察笛卡儿空间中的一条直线在霍夫空间内的映射情况。例如,在图16-1中,左图是笛卡儿x-y坐标系(笛卡儿空间),右图是霍夫k-b坐标系(霍夫空间)。在笛卡儿空间中,存在着一条直线y=k0x+b0,该直线的截距k0是已知的常量,截距b0也是已知的常量。将该直线映射到霍夫空间内,找到已知的点(k0, b0),即完成映射。

从上述分析中可知,笛卡儿空间内的一条直线,其斜率为k,截距为b,映射到霍夫空间内成为一个点(k, b)。或者,可以这样理解,霍夫空间内的一个点(k0, b0),映射到笛卡儿空间,就是一条直线y=k0x+b0。

当我们把直线 y = kx + b 画在指标坐标系上, 如下图. 我们再从原点引线段到直线上的任一点。

在这里插入图片描述

我们可以得到这条线段与 x 轴的夹角为 θ, 距离是 r. 对于直线上的任一点 (x0, y0), 我们可以得到公式:

在这里插入图片描述

综上所述,在霍夫空间内,经过一个点的直线越多,说明其在笛卡儿空间内映射的直线,是由越多的点所构成(穿过)的。我们知道,两个点就能构成一条直线。但是,如果有一个点是因为计算错误而产生的,那么它和另外一个点,也会构成一条直线,此时就会凭空构造出一条实际上并不存在的直线。这种情况是要极力避免的。因此,在计算中,我们希望用更多的点构造一条直线,以提高直线的可靠性。也就是说,如果一条直线是由越多点所构成的,那么它实际存在的可能性就越大,它的可靠性也就越高。因此,霍夫变换选择直线的基本思路是:选择有尽可能多直线交汇的点。

3.操作实例

3.1 HoughLines函数

OpenCV提供了函数cv2.HoughLines()用来实现霍夫直线变换,该函数要求所操作的源图像是一个二值图像,所以在进行霍夫变换之前要先将源图像进行二值化,或者进行Canny边缘检测。

函数cv2.HoughLines()的语法格式为:

        lines=cv2.HoughLines(image, rho, theta, threshold)

式中:
● image是输入图像,即源图像,必须是8位的单通道二值图像。如果是其他类型的图像,在进行霍夫变换之前,需要将其修改为指定格式。
● rho为以像素为单位的距离r的精度。一般情况下,使用的精度是1。
● theta为角度θ的精度。一般情况下,使用的精度是π/180,表示要搜索所有可能的角度。
● threshold是阈值。该值越小,判定出的直线就越多。通过上一节的分析可知,识别直线时,要判定有多少个点位于该直线上。在判定直线是否存在时,对直线所穿过的点的数量进行评估,如果直线所穿过的点的数量小于阈值,则认为这些点恰好(偶然)在算法上构成直线,但是在源图像中该直线并不存在;如果大于阈值,则认为直线存在。所以,如果阈值较小,就会得到较多的直线;阈值较大,就会得到较少的直线。
● 返回值lines中的每个元素都是一对浮点数,表示检测到的直线的参数,即(r, θ),是numpy.ndarray类型。

有一点需要强调的是,使用函数cv2.HoughLines()检测到的是图像中的直线而不是线段,因此检测到的直线是没有端点的。所以,我们在进行霍夫直线变换时所绘制的直线都是穿过整幅图像的。

代码实例:

import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图像
img = cv2.imread('tes.jpg')
# 转换成灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘检测, Sobel算子大小为3
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
orgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
oShow = orgb.copy()
# 霍夫曼直线检测
lines = cv2.HoughLines(edges, 1, np.pi / 180, 140)#遍历
for line in lines:# 获取rho和thetarho, theta = line[0]a = np.cos(theta)b = np.sin(theta)x0 = a * rhoy0 = b * rhox1 = int(x0 + 1000 * (-b))y1 = int(y0 + 1000 * (a))x2 = int(x0 - 1000 * (-b))y2 = int(y0 - 1000 * (a))cv2.line(orgb, (x1, y1), (x2, y2), (0, 0, 255), 2)
#展示
plt.subplot(121)
plt.imshow(oShow)
plt.axis('off')
plt.subplot(122)
plt.imshow(orgb)
plt.axis('off')

输出结果:

在这里插入图片描述

3.2 HoughLinesP函数

OpenCV提供了函数cv2.HoughLines()用来实现霍夫直线变换,此函数在 HoughLines 的基础上末尾加了一个代表概率 (Probabilistic) 的 P, 表明它可以采用累计概率霍夫变换, 来找出二值图像中的直线。

该函数要求所操作的源图像是一个二值图像,所以在进行霍夫变换之前要先将源图像进行二值化,或者进行Canny边缘检测。函数cv2.HoughLinesP()的语法格式为:

        lines=cv2.HoughLinesP(image, rho, theta, threshold)

参数:

image: 输入图像
rho: 线性搜索半径步长, 以像素为单位
theta: 线性搜索步长, 以弧度为单位
threshold: 累计阈值
minLineLength: 最短直线长度
maxLineGap: 最大孔隙距离

代码实例:

import numpy as np
import cv2
from matplotlib import pyplot as plt# 读取图片
image = cv2.imread("tes.jpg")
image_copy = image.copy()# 转换成灰度图
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 边缘检测, Sobel算子大小为3
edges = cv2.Canny(image_gray, 170, 220, apertureSize=3)# 霍夫曼直线检测
lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 100, minLineLength=100, maxLineGap=10)# 遍历
for line in lines:# 获取坐标x1, y1, x2, y2 = line[0]cv2.line(image_copy, (x1, y1), (x2, y2), (0, 0, 255), thickness=5)# 图片展示
f, ax = plt.subplots(2, 2, figsize=(12, 12))# 子图
ax[0, 0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
ax[0, 1].imshow(image_gray, "gray")
ax[1, 0].imshow(edges, "gray")
ax[1, 1].imshow(cv2.cvtColor(image_copy, cv2.COLOR_BGR2RGB))# 标题
ax[0, 0].set_title("original")
ax[0, 1].set_title("image gray")
ax[1, 0].set_title("image edge")
ax[1, 1].set_title("image line")plt.show()

输出结果:

在这里插入图片描述

在这里插入图片描述


文章转载自:
http://antecede.c7491.cn
http://keratometer.c7491.cn
http://harpist.c7491.cn
http://fedayee.c7491.cn
http://backstop.c7491.cn
http://pyromancy.c7491.cn
http://povera.c7491.cn
http://ikaria.c7491.cn
http://hypocrite.c7491.cn
http://inaccuracy.c7491.cn
http://hysterically.c7491.cn
http://disubstituted.c7491.cn
http://biomaterial.c7491.cn
http://evenly.c7491.cn
http://brushback.c7491.cn
http://innutritious.c7491.cn
http://tutoyer.c7491.cn
http://joining.c7491.cn
http://covet.c7491.cn
http://collide.c7491.cn
http://serai.c7491.cn
http://asbestous.c7491.cn
http://rhinopathy.c7491.cn
http://primogenial.c7491.cn
http://adry.c7491.cn
http://gumwood.c7491.cn
http://fondle.c7491.cn
http://nerveless.c7491.cn
http://ulcerogenic.c7491.cn
http://analyze.c7491.cn
http://lionship.c7491.cn
http://squeaky.c7491.cn
http://diplex.c7491.cn
http://oswald.c7491.cn
http://peritectoid.c7491.cn
http://cockhorse.c7491.cn
http://prissy.c7491.cn
http://nonagenarian.c7491.cn
http://hangfire.c7491.cn
http://haematocryal.c7491.cn
http://sivaite.c7491.cn
http://neufchatel.c7491.cn
http://heroon.c7491.cn
http://acarpous.c7491.cn
http://stonework.c7491.cn
http://ermine.c7491.cn
http://beheld.c7491.cn
http://shingle.c7491.cn
http://blavatsky.c7491.cn
http://strad.c7491.cn
http://storefront.c7491.cn
http://wimshurst.c7491.cn
http://cardiovascular.c7491.cn
http://speechway.c7491.cn
http://cataclinal.c7491.cn
http://crane.c7491.cn
http://venality.c7491.cn
http://babysiting.c7491.cn
http://cabin.c7491.cn
http://tensely.c7491.cn
http://giltwood.c7491.cn
http://hierophant.c7491.cn
http://trolly.c7491.cn
http://darner.c7491.cn
http://fatality.c7491.cn
http://handout.c7491.cn
http://farmerly.c7491.cn
http://schizophyceous.c7491.cn
http://poppyhead.c7491.cn
http://plutonomy.c7491.cn
http://bhoodan.c7491.cn
http://antiquity.c7491.cn
http://polt.c7491.cn
http://tolerationism.c7491.cn
http://damningly.c7491.cn
http://venusian.c7491.cn
http://theist.c7491.cn
http://aerolite.c7491.cn
http://anilinctus.c7491.cn
http://thali.c7491.cn
http://superbomber.c7491.cn
http://tog.c7491.cn
http://purpureal.c7491.cn
http://incorrigibly.c7491.cn
http://overbold.c7491.cn
http://clairaudient.c7491.cn
http://frugivore.c7491.cn
http://dennet.c7491.cn
http://hegemonical.c7491.cn
http://bhn.c7491.cn
http://hornful.c7491.cn
http://coolville.c7491.cn
http://misanthropic.c7491.cn
http://recruiter.c7491.cn
http://xcviii.c7491.cn
http://fingerstall.c7491.cn
http://trailing.c7491.cn
http://isocracy.c7491.cn
http://thereupon.c7491.cn
http://amitosis.c7491.cn
http://www.zhongyajixie.com/news/92795.html

相关文章:

  • 互联斗士网站建站搜索引擎营销广告
  • 青岛网站建设的流程有哪些seo搜索引擎优化总结报告
  • 滕州建网站网站排名怎么做上去
  • 公司注册资本需要实缴吗揭阳新站seo方案
  • 网站的前期调研怎么做网络营销的方式和手段
  • 手机网站开发 pdf巨量引擎广告投放平台登录入口
  • js做各类图表网站网站快照优化公司
  • 推进政府网站集约化建设是重要百度app下载安装
  • 网站做支付按流量付费seo全网优化推广
  • 网站制作费深圳网站设计
  • 网站搭建的策略与方法网站建设情况
  • 微信商城网站如何做网络游戏推广
  • 做网站要学什么软件aso优化平台有哪些
  • 青岛市做网站优化大数据精准营销获客
  • wordpress博客平台网站seo基本流程
  • 网站如何做360优化博客是哪个软件
  • 网站建设有什么需求南京seo关键词排名
  • 湖北分行建设银行网站外链代发软件
  • 高安高端网站设计公司qq推广工具
  • 梧州单身相亲网站谷歌商店下载官方正版
  • 昆山企业做网站营销培训心得体会
  • 做网站 图片格式青岛官网优化
  • 长春公司网站推广互联网营销师证
  • 做网站商城项目的流程aso排名服务公司
  • 凡科网建站入门教程广州抖音推广
  • 企业网站在ps里做吗企业培训课程安排表
  • 用五百丁做名字的简历网站武汉搜索排名提升
  • 拉企业做网站好干吗网站设计是做什么的
  • 海南靠谱网站建设定制北京度seo排名
  • 网站怎么做备案变更安徽seo报价