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实现调用其他python脚本的方法
Oct 05 Python
Python查找函数f(x)=0根的解决方法
May 07 Python
举例讲解Django中数据模型访问外键值的方法
Jul 21 Python
Python中在脚本中引用其他文件函数的实现方法
Jun 23 Python
Python编程之gui程序实现简单文件浏览器代码
Dec 08 Python
单链表反转python实现代码示例
Feb 08 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
Mar 19 Python
详解python数据结构和算法
Apr 18 Python
Python魔法方法 容器部方法详解
Jan 02 Python
简单了解Django ORM常用字段类型及参数配置
Jan 07 Python
解决keras加入lambda层时shape的问题
Jun 11 Python
Python基础教程之输入输出和运算符
Jul 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对gzip文件或者字符串解压实例参考
2008/07/25 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
PHP之正则表达式捕获组与非捕获组(详解)
2015/07/29 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
javascript与CSS复习(三)
2010/06/29 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
关于angular浏览器兼容性问题的解决方案
2020/07/26 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
Python AES加密模块用法分析
2017/05/22 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
python科学计算之narray对象用法
2019/11/25 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
学期自我鉴定范文
2013/10/01 职场文书
个人简历中自我评价
2014/02/11 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
导师工作推荐信范文
2014/05/17 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
小学运动会加油稿
2015/07/22 职场文书
Python进程间的通信之语法学习
2022/04/11 Python