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基类函数的重载与调用实例分析
Jan 12 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
Python基于dom操作xml数据的方法示例
May 12 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
Flask框架使用DBUtils模块连接数据库操作示例
Jul 20 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
Jul 26 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
python requests更换代理适用于IP频率限制的方法
Aug 21 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
判断Threading.start新线程是否执行完毕的实例
May 02 Python
Python 实现一个计时器
Jul 28 Python
Python django框架 web端视频加密的实例详解
Nov 20 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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
PHP脚本的10个技巧(8)
2006/10/09 PHP
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
动态添加js事件实现代码
2009/03/12 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
python在指定目录下查找gif文件的方法
2015/05/04 Python
Python实现LRU算法的2种方法
2015/06/24 Python
Python 面试中 8 个必考问题
2018/11/16 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
HTML5对比HTML4的主要改变和改进总结
2016/05/27 HTML / CSS
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
美国滑板店:Tactics
2020/11/08 全球购物
保安员岗位职责
2013/11/17 职场文书
自主招生自荐信
2013/12/08 职场文书
领导证婚人证婚词
2014/01/13 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL