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 相关文章推荐
400多行Python代码实现了一个FTP服务器
May 10 Python
详解Python异常处理中的Finally else的功能
Dec 29 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
Apr 08 Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 Python
Python基本socket通信控制操作示例
Jan 30 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
python输出决策树图形的例子
Aug 09 Python
Python+OpenCV实现实时眼动追踪的示例代码
Nov 11 Python
python Socket网络编程实现C/S模式和P2P
Jun 22 Python
如何用python识别滑块验证码中的缺口
Apr 01 Python
Python Numpy库的超详细教程
Apr 06 Python
python数据分析之单因素分析线性拟合及地理编码
Jun 25 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 IP及IP段进行访问限制的代码
2008/12/17 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
浅谈vue中慎用style的scoped属性
2017/11/28 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
python创建列表并给列表赋初始值的方法
2015/07/28 Python
python 禁止函数修改列表的实现方法
2017/08/03 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
Python用户自定义异常的实现
2020/12/25 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
读书演讲主持词
2014/03/18 职场文书
留学生求职信
2014/06/03 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
受伤赔偿协议书
2014/09/24 职场文书
2014年教育工作总结
2014/11/26 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
教师先进个人材料
2014/12/17 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书