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的ORM框架中的SQLAlchemy库的映射关系
Apr 25 Python
python通过索引遍历列表的方法
May 04 Python
简述Python中的进程、线程、协程
Mar 18 Python
python解决Fedora解压zip时中文乱码的方法
Sep 18 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
python3.x 将byte转成字符串的方法
Jul 17 Python
对Python多线程读写文件加锁的实例详解
Jan 14 Python
Python3.5实现的罗马数字转换成整数功能示例
Feb 25 Python
详解Python中is和==的区别
Mar 21 Python
pymysql的简单封装代码实例
Jan 08 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
python爬虫实例之获取动漫截图
May 31 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获取一个字符串中间一部分字符的方法
2014/08/19 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
jQuery之ajax删除详解
2014/02/27 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
css配合JavaScript实现tab标签切换效果
2018/10/11 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
python映射列表实例分析
2015/01/26 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
python随机生成库faker库api实例详解
2019/11/28 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
python/golang 删除链表中的元素
2020/09/14 Python
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
C语言中break与continue的区别
2012/07/12 面试题
旅游专业职业生涯规划范文
2014/01/13 职场文书
幼儿园招生广告
2014/03/19 职场文书
职工宿舍管理制度
2015/08/05 职场文书