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多线程学习资料
Dec 19 Python
Python 列表(List)操作方法详解
Mar 11 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
Jun 29 Python
python爬虫获取淘宝天猫商品详细参数
Jun 23 Python
通过Pandas读取大文件的实例
Jun 07 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
numpy数组之存取文件的实现示例
May 24 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
TensorFlow实现指数衰减学习率的方法
Feb 05 Python
python实现扫雷游戏
Mar 03 Python
利用PyTorch实现VGG16教程
Jun 24 Python
Python容器类型公共方法总结
Aug 19 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
使用无限生命期Session的方法
2006/10/09 PHP
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
微信上传视频文件提示(推荐)
2018/11/22 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
Vue动态生成表格的行和列
2019/07/18 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中下划线的使用方法
2015/03/27 Python
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
Django-migrate报错问题解决方案
2020/04/21 Python
python中的unittest框架实例详解
2021/02/05 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
爱祖国演讲稿
2014/05/04 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
社区工作者个人总结
2015/02/28 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
周末问候语大全
2015/11/10 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript