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的Django框架来制作一个RSS阅读器
Jul 22 Python
Python的re模块正则表达式操作
May 25 Python
python3音乐播放器简单实现代码
Apr 20 Python
Python实现网站注册验证码生成类
Jun 08 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
Feb 01 Python
Python匿名函数及应用示例
Apr 09 Python
python实现五子棋小程序
Jun 18 Python
python GUI图形化编程wxpython的使用
Jul 19 Python
python修改文件内容的3种方法详解
Nov 15 Python
python识别验证码图片实例详解
Feb 17 Python
Python实战之实现康威生命游戏
Apr 26 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中trim()函数简单使用指南
2015/04/16 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
vue做网页开场视频的实例代码
2017/10/20 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
python实现在字符串中查找子字符串的方法
2015/07/11 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
Python基础教程之正则表达式基本语法以及re模块
2016/03/25 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
2020/02/26 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
不拖欠农民工工资承诺书
2014/03/31 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
长江三峡导游词
2015/01/31 职场文书
我是特种兵观后感
2015/06/11 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android
Java使用HttpClient实现文件下载
2022/08/14 Java/Android