python opencv实现直线检测并测出倾斜角度(附源码+注释)


Posted in Python onDecember 31, 2020

由于学习需要,我想要检测出图片中的直线,并且得到这些直线的角度。于是我在网上搜了好多直线检测的代码,但是没有搜到附有计算直线倾斜角度的代码,所以我花了一点时间,自己写了一份直线检测并测出倾斜角度的代码,希望能够帮助到大家!

注:这份代码只能够检测简单结构图片的直线,复杂结构的图片还需要设置合理的参数

下面展示 源码

import cv2
import numpy as np

def line_detect(image):
  # 将图片转换为HSV
  hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  # 设置阈值
  lowera = np.array([0, 0, 221])
  uppera = np.array([180, 30, 255])
  mask1 = cv2.inRange(hsv, lowera, uppera)
  kernel = np.ones((3, 3), np.uint8)

  # 对得到的图像进行形态学操作(闭运算和开运算)
  mask = cv2.morphologyEx(mask1, cv2.MORPH_CLOSE, kernel) #闭运算:表示先进行膨胀操作,再进行腐蚀操作
  mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)  #开运算:表示的是先进行腐蚀,再进行膨胀操作

  # 绘制轮廓
  edges = cv2.Canny(mask, 50, 150, apertureSize=3)
  # 显示图片
  cv2.imshow("edges", edges)
  # 检测白线  这里是设置检测直线的条件,可以去读一读HoughLinesP()函数,然后根据自己的要求设置检测条件
  lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 40,minLineLength=10,maxLineGap=10)
  print "lines=",lines
  print "========================================================"
  i=1
  # 对通过霍夫变换得到的数据进行遍历
  for line in lines:
    # newlines1 = lines[:, 0, :]
    print "line["+str(i-1)+"]=",line
    x1,y1,x2,y2 = line[0]  #两点确定一条直线,这里就是通过遍历得到的两个点的数据 (x1,y1)(x2,y2)
    cv2.line(image,(x1,y1),(x2,y2),(0,0,255),2)   #在原图上画线
    # 转换为浮点数,计算斜率
    x1 = float(x1)
    x2 = float(x2)
    y1 = float(y1)
    y2 = float(y2)
    print "x1=%s,x2=%s,y1=%s,y2=%s" % (x1, x2, y1, y2)
    if x2 - x1 == 0:
      print "直线是竖直的"
      result=90
    elif y2 - y1 == 0 :
      print "直线是水平的"
      result=0
    else:
      # 计算斜率
      k = -(y2 - y1) / (x2 - x1)
      # 求反正切,再将得到的弧度转换为度
      result = np.arctan(k) * 57.29577
      print "直线倾斜角度为:" + str(result) + "度"
    i = i+1
  #   显示最后的成果图
  cv2.imshow("line_detect",image)
  return result

if __name__ == '__main__':
  # 读入图片
  src = cv2.imread("lines/line6.jpg")
  # 设置窗口大小
  cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)
  # 显示原始图片
  cv2.imshow("input image", src)
  # 调用函数
  line_detect(src)
  cv2.waitKey(0)

测试图片:

python opencv实现直线检测并测出倾斜角度(附源码+注释)

效果图:

python opencv实现直线检测并测出倾斜角度(附源码+注释)

图像处理比较粗糙,由于时间问题,也就没有深入研究了。

到此这篇关于python opencv实现直线检测并测出倾斜角度(附源码+注释)的文章就介绍到这了,更多相关opencv 直线检测内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中利用函数装饰器实现备忘功能
Mar 30 Python
python函数形参用法实例分析
Aug 04 Python
Python随机数random模块使用指南
Sep 09 Python
使用Python和xlwt向Excel文件中写入中文的实例
Apr 21 Python
python3实现zabbix告警推送钉钉的示例
Feb 20 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
python绘制直方图和密度图的实例
Jul 08 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
Python socket模块方法实现详解
Nov 05 Python
python3美化表格数据输出结果的实现代码
Apr 14 Python
python字典的元素访问实例详解
Jul 21 Python
Python实现Appium端口检测与释放的实现
Dec 31 #Python
python 基于selectors库实现文件上传与下载
Dec 31 #Python
python中Mako库实例用法
Dec 31 #Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 #Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
Dec 31 #Python
python 检测nginx服务邮件报警的脚本
Dec 31 #Python
Django 实现图片上传和下载功能
Dec 31 #Python
You might like
基于mysql的bbs设计(三)
2006/10/09 PHP
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
php截取中文字符串函数实例
2015/02/23 PHP
php+MySQL实现登录时验证登录名和密码是否正确
2016/05/10 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
js多级树形弹出一个小窗口层(非常好用)实例代码
2013/03/19 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
Python实现线程状态监测简单示例
2018/03/28 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
HTML5 canvas基本绘图之绘制五角星
2016/06/27 HTML / CSS
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
Myholidays美国:在线旅游网站
2019/08/16 全球购物
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
小学生操行评语大全
2014/04/22 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
英文慰问信
2015/02/14 职场文书
天那边观后感
2015/06/09 职场文书