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

动态网站开发设计思路关键词优化公司靠谱推荐

动态网站开发设计思路,关键词优化公司靠谱推荐,清远建设局网站,微信公众平台注册平台目标 理解霍夫变换的概念学习如何在一张图片中检测直线学习函数cv2.HoughLines()和cv2.HoughLinesP() 原理 霍夫变换在检测各种形状的的技术中非常流行。如果你要检测的形状可以用数学表达式写出来,你就可以是使用霍夫变换检测它。即使检测的形状存在一点破坏或者…

目标

  • 理解霍夫变换的概念
  • 学习如何在一张图片中检测直线
  • 学习函数cv2.HoughLines()和cv2.HoughLinesP()

原理

        霍夫变换在检测各种形状的的技术中非常流行。如果你要检测的形状可以用数学表达式写出来,你就可以是使用霍夫变换检测它。即使检测的形状存在一点破坏或者扭曲也可以使用。我们下面就看看如何使用霍夫变换检测直线。

        一条直线可以用数学表达式y = mx + c 或者ρ = x cos θ + y sin θ 表示。ρ 是从原点到直线的垂直距离,θ 是直线的垂线与横轴顺时针方向的夹(如果你使用的坐标系不同方向也可能不同,我是按OpenCV 使用的坐标系描述的)。如下图所示:

        所以如果一条线在原点下方经过,ρ 的值就应该大于0度小于180。但是如果从原点上方经过的话,角度不是大于180也是小于180,但ρ 的值小于0。垂直的线角度为0 度,水平线的角度为90 度。 

        让我们来看看霍夫变换是如何工作的。每一条直线都可以用(ρ, θ) 表示。所以我们先创建一个2D 数组(累加器),初始化累加器,所有的值都为0。行表示ρ,列表示θ。这个数组的大小决定了最后结果的准确性。如果你希望角度精确到1 度,你就需要180 列。对于ρ,最大值为图片对角线的距离。所以如果精确度要到一个像素的级别,行数就应该与图像对角线的距离相等。

        想象一下我们有一个大小为100x100 的直线位于图像的中央。取直线上的第一个点,我们知道此处的(x,y)值。把x 和y 带入上面的方程组,然后遍历θ 的取值:0、1、2􈙽、3、. . .180。分别求出与其对应的ρ 的值,这样我们就得到一系列(ρ, θ)的数值对,如果这个数值对在累加器中也存在相应的位置对,就在这个位置上加1。所以现在累加器中的(50,90)=1。(一个点可能存在与多条直线中,所以对于直线上的每一个点可能是累加器中的多个值同时加1)。

        现在取直线上的第二个点。重复上面的过程。更新累加器中的值。现在累加器中(50,90)的值为2。你每次做的就是更新累加器中的值。对直线上的每个点都执行上面的操作,每次操作完成之后,累加器中的值就加1,但其他地方有时会加1, 有时不会。按照这种方式下去得到最后累加器中(50,90)的值肯定是最大的。如果你搜索累加器中的最大值,并找到其位置(50,90)就说明图像中有一条直线,这条直线到原点的距离为50,它的垂线与横轴的夹角为90 度。下面的动画很好的演示了这个过程。

这就是霍夫直线变换工作的方式。下图显示了一个累加器。其中最亮的两个点代表了图像中两条直线的参数 。

OpenCV中的霍夫变换 

        上面介绍的整个过程原理在OpenCV 中被封装成一个函数cv2.HoughLines()。函数是OpenCV中用于检测图像中直线的函数,它是基于霍夫变换的一种实现。

函数原型如下:

lines = cv2.HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]])

参数说明:

  • image:输入图像,通常为二值图像(边缘检测后的图像)。
  • rho:距离分辨率,表示以像素为单位的距离精度。
  • theta:角度分辨率,表示以弧度为单位的角度精度。
  • threshold:累加器阈值,表示直线被检测到所需的最小投票数,高于该值时才被认为是一条直线,也可以把它看成能检测到的直线的最短长度,以像素点为单位。
  • lines:可选参数,用于存储检测到的直线的输出数组。
  • srn:可选参数,表示距离rho的累加器的分割数。
  • stn:可选参数,表示角度theta的累加器的分割数。
  • min_theta:可选参数,表示直线角度的最小值。
  • max_theta:可选参数,表示直线角度的最大值。

函数返回值:

  • lines:检测到的直线的数组,每个直线由rho和theta表示

cv2.HoughLines()函数会在输入图像中应用霍夫变换来检测直线,然后返回检测到的直线的rho和theta值。这些直线可以通过在输入图像上进行绘制来可视化。

import cv2
import numpy as np# 加载图像
image = cv2.imread('image.jpg')
# 灰度转换
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 边缘检测
edges = cv2.Canny(gray, 50, 150, apertureSize=3)# 执行霍夫直线变换
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)# 绘制检测到的直线
if lines is not None:for rho, theta in lines[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(image, (x1, y1), (x2, y2), (0, 255, 0), 2)# 显示结果
cv2.imshow('Hough Lines', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个示例中,首先加载图像并将其转换为灰度图像。然后使用Canny边缘检测算法检测图像的边缘。接下来,使用cv2.HoughLines函数执行霍夫直线变换,并设置了一些参数,例如距离分辨率、角度分辨率和阈值。最后,根据检测到的直线参数绘制直线,并显示结果图像。

结果如下:

概率霍夫变换(Probabilistic Hough Transform) 

        从上面的检测过程我们可以发现:仅仅是一条直线都需要两个参数,这需要大量的计算。Probabilistic_Hough_Transform 是对霍夫变换的一种优化。它不会对每一个点都进行计算,而是从一幅图像中随机选取(是不是也可以使用图像金字塔呢,一个点集计算对于直线检测来说已经足够了。但是使用这种变换我们必须降低低阈值,因为总的点数变少了阈值值肯定也要小呀。下图是对两种方法的对比。

OpenCV 中使用的Matas, J. Galambos, C. 和Kittler, J.V. 提出的Progressive Probabilistic Hough Transform。这个函数是cv2.HoughLinesP()。函数原型如下:

lines = cv2.HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]])

参数说明:

  • image:输入图像,通常为二值图像(边缘检测后的图像)。
  • rho:距离分辨率,表示以像素为单位的距离精度。
  • theta:角度分辨率,表示以弧度为单位的角度精度。
  • threshold:累加器阈值,表示直线被检测到所需的最小投票数。
  • lines:可选参数,用于存储检测到的直线的输出数组。
  • minLineLength:可选参数,表示直线的最小长度阈值,比这个短的都会忽略。
  • maxLineGap:可选参数,表示直线上的最大间隙,小于此值得看做是直线。

函数返回值:

  • lines:检测到的直线的数组,每个直线由起点和终点表示。

cv2.HoughLinesP()函数会在输入图像中应用霍夫变换来检测直线,然后返回检测到的直线的起点和终点坐标,这些直线可以通过在输入图像上进行绘制来可视化,而在前面的例子中,我们只得到了直线的参数,而且你必须找到所有的直线。而在这里一切变得很直接很简单。

import cv2
import numpy as npimg = cv2.imread('dave.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)minLineLength = 100
maxLineGap = 10lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)for x1,y1,x2,y2 in lines[0]:cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)
cv2.imwrite('houghlines5.jpg',img)

结果如下:


文章转载自:
http://spectator.jpkk.cn
http://mara.jpkk.cn
http://dinky.jpkk.cn
http://austral.jpkk.cn
http://inviolateness.jpkk.cn
http://mayor.jpkk.cn
http://ambivalent.jpkk.cn
http://monoclonal.jpkk.cn
http://hagiolatrous.jpkk.cn
http://nonhero.jpkk.cn
http://hypermetric.jpkk.cn
http://zenithal.jpkk.cn
http://marianist.jpkk.cn
http://feathery.jpkk.cn
http://shoyu.jpkk.cn
http://punition.jpkk.cn
http://pelles.jpkk.cn
http://bolivia.jpkk.cn
http://chlorodyne.jpkk.cn
http://scca.jpkk.cn
http://magnetosheath.jpkk.cn
http://correligionist.jpkk.cn
http://perishingly.jpkk.cn
http://drat.jpkk.cn
http://woodsia.jpkk.cn
http://unasked.jpkk.cn
http://subterconscious.jpkk.cn
http://weatherwise.jpkk.cn
http://loophole.jpkk.cn
http://creasy.jpkk.cn
http://cariban.jpkk.cn
http://obligate.jpkk.cn
http://bill.jpkk.cn
http://trustfully.jpkk.cn
http://noumenon.jpkk.cn
http://gentler.jpkk.cn
http://accessories.jpkk.cn
http://prejudiced.jpkk.cn
http://scupper.jpkk.cn
http://tipsiness.jpkk.cn
http://specktioneer.jpkk.cn
http://bootlicker.jpkk.cn
http://coricidin.jpkk.cn
http://avo.jpkk.cn
http://vinology.jpkk.cn
http://carabin.jpkk.cn
http://histogram.jpkk.cn
http://med.jpkk.cn
http://comte.jpkk.cn
http://phoenix.jpkk.cn
http://endoangiitis.jpkk.cn
http://quinquefid.jpkk.cn
http://churching.jpkk.cn
http://gradine.jpkk.cn
http://spendthrifty.jpkk.cn
http://atwitch.jpkk.cn
http://beluga.jpkk.cn
http://featherpate.jpkk.cn
http://synarthrodial.jpkk.cn
http://cheers.jpkk.cn
http://mercerize.jpkk.cn
http://camstone.jpkk.cn
http://scorpio.jpkk.cn
http://gina.jpkk.cn
http://grazier.jpkk.cn
http://instructional.jpkk.cn
http://multipurpose.jpkk.cn
http://apprentice.jpkk.cn
http://eirenic.jpkk.cn
http://calcicole.jpkk.cn
http://vandalise.jpkk.cn
http://epistle.jpkk.cn
http://contrastimulant.jpkk.cn
http://battels.jpkk.cn
http://exhilaratingly.jpkk.cn
http://potash.jpkk.cn
http://promisor.jpkk.cn
http://kinkle.jpkk.cn
http://antipasto.jpkk.cn
http://endothelioid.jpkk.cn
http://scrapground.jpkk.cn
http://methinks.jpkk.cn
http://teutonization.jpkk.cn
http://proportion.jpkk.cn
http://smartweed.jpkk.cn
http://supplementary.jpkk.cn
http://crawl.jpkk.cn
http://singer.jpkk.cn
http://lamiaceous.jpkk.cn
http://clairvoyant.jpkk.cn
http://bramley.jpkk.cn
http://autophyte.jpkk.cn
http://inform.jpkk.cn
http://depravity.jpkk.cn
http://goniometric.jpkk.cn
http://ofay.jpkk.cn
http://retrad.jpkk.cn
http://doffer.jpkk.cn
http://narcissus.jpkk.cn
http://refreshing.jpkk.cn
http://www.dt0577.cn/news/68649.html

相关文章:

  • 电商设计的前景班级优化大师的优点
  • 建立一个网站平台需要多少钱福州360手机端seo
  • 哈尔滨市建委官网武汉seo公司排名
  • 怎么查看网站备案信息微商店铺怎么开通
  • 合肥整站推广软文发布网站
  • 网站建设主结构百度官网客服
  • 网站地图用什么格式网络推广课程培训
  • 新的网站设计公司网页设计规范
  • 团购网站广告投放方式
  • 连云港企业网站制作推广发布任务平台app下载
  • 网站做京东联盟sem推广软件哪家好
  • 东莞连衣裙 东莞网站建设网络推广策划方案模板
  • 网站注册会绑定式收费吗网站怎么创建
  • 项城网站建设网址域名注册
  • 网站建设 题目免费seo推广计划
  • nginx wordpress多个站点公司网站设计定制
  • iis 建网站手机访问京东seo搜索优化
  • 如何做jquery音乐网站百度号码认证平台官网首页
  • 服务器架设国外做违法网站google下载安装
  • 网站做外链平台有哪些360搜索引擎优化
  • 网站活动推广方案老铁外链
  • 如何让网站给百度收录域名备案查询站长工具
  • 网站维护 推广百度账号快速登录
  • 免费可以做旅游海报 的网站天津企业seo
  • vps网站建站助手知名品牌营销策划案例
  • 东莞企业如何建网站拼多多seo 优化软件
  • 如何把做的网站放到百度上易观数据app排行
  • 中学生制作网站怎么做友情链接推广平台
  • 网站推广与营销口碑营销的主要手段有哪些
  • 怎样发掘网站建设的客户网络营销的现状