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使用Supervisor来管理进程的方法
May 28 Python
Python使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
详解Python读取配置文件模块ConfigParser
May 11 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
Oct 16 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
django模板加载静态文件的方法步骤
Mar 01 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 Python
如何使用Pytorch搭建模型
Oct 26 Python
如何使用Python进行PDF图片识别OCR
Jan 22 Python
Python移位密码、仿射变换解密实例代码
Jun 27 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
php的计数器程序
2006/10/09 PHP
php项目打包方法
2008/02/18 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
深入浅出php socket编程
2015/05/13 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
js jquery做的图片连续滚动代码
2008/01/06 Javascript
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
jquery中获取select选中值的代码
2011/06/27 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
JS实现的排列组合算法示例
2019/07/16 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
Python中暂存上传图片的方法
2015/02/18 Python
python机器学习实战之树回归详解
2017/12/20 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
python 装饰器重要在哪
2021/02/14 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
汽车检测与维修专业求职信
2013/10/30 职场文书
团员的自我评价
2013/12/01 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL