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实现k均值算法示例(k均值聚类算法)
Mar 16 Python
python网络编程学习笔记(六):Web客户端访问
Jun 09 Python
Python实现发送email的几种常用方法
Aug 18 Python
Python爬虫DNS解析缓存方法实例分析
Jun 02 Python
Django中针对基于类的视图添加csrf_exempt实例代码
Feb 11 Python
Python基于xlrd模块操作Excel的方法示例
Jun 21 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
python 求定积分和不定积分示例
Nov 20 Python
Pytorch环境搭建与基本语法
Jun 03 Python
简单的命令查看安装的python版本号
Aug 28 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 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 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
php获取字段名示例分享
2014/03/03 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
基于jquery的15款幻灯片插件
2011/04/10 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
jQuery元素的隐藏与显示实例
2015/01/20 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
Angular实现跨域(搜索框的下拉列表)
2017/02/16 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
js中的面向对象之对象常见创建方法详解
2019/12/16 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
[01:07:11]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
Python数据库的连接实现方法与注意事项
2016/02/27 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
python热力图实现简单方法
2021/01/29 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
财务助理岗位职责
2013/11/10 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
明信片寄语大全
2014/04/08 职场文书
工厂门卫岗位职责
2015/04/13 职场文书