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 version 2.7 required, which was not found in the registry
Aug 26 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 Python
Python装饰器实现几类验证功能做法实例
May 18 Python
Python实现matplotlib显示中文的方法详解
Feb 06 Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 Python
Python Numpy:找到list中的np.nan值方法
Oct 30 Python
对python判断ip是否可达的实例详解
Jan 31 Python
python中seaborn包常用图形使用详解
Nov 25 Python
Pytorch中的VGG实现修改最后一层FC
Jan 15 Python
python logging 日志的级别调整方式
Feb 21 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
Python实现将多张图片合成MP4视频并加入背景音乐
Apr 28 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安全编程之加密功能
2006/10/09 PHP
PHP 存取 MySQL 数据库的一个例子
2006/10/09 PHP
关于Intype一些小问题的解决办法
2008/03/28 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
python从入门到精通(DAY 1)
2015/12/20 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
python中metaclass原理与用法详解
2019/06/25 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
小学生红领巾广播稿
2014/01/21 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
自我检讨报告
2015/01/28 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
检讨书格式
2019/04/25 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python