opencv-api houshlinesp

https://docs.opencv.org/3.4.3/dd/d1a/group__imgproc__feature.html#ga8618180a5948286384e3b7ca02f6feeb

	lines	=	cv.HoughLinesP(	image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]]	)

在二值化图片里检测直线

参数描述
img输入图像
lines输出直线的坐标
rho像素每次迭代的大小(每一次选取像素的过程跳跃多少,一般设置为1)
theta角度累加器的大小(即直线参数theta,一般为pi/180)
thresold超过设定阈值才被检测出线段,值越大,基本上意味着检出的线段越长,检出的线段个数越少。根据情况推荐先用100试试
minLineLength线段的最小长度
maxLineGap同一方向上两条线段判定为一条线段的最大允许间隔

示例:

import cv2 as cv
import numpy as np

img = cv.imread('./data/test2.png')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)  # 转换为灰度图
cv.imwrite('./data/test_gray.png',gray)
ret,gray = cv.threshold(gray,230,255,cv.THRESH_BINARY_INV)  # 进行二值化处理
cv.imwrite('./data/test_bin.png',gray)
# edges = cv.Canny(gray, 50, 150, apertureSize=3)  # 边缘检测
# cv.imwrite('./data/test_edges.png',edges)
lines = cv.HoughLinesP(gray, 1, np.pi / 180, 100, minLineLength=1000, maxLineGap=10)   # 直线检测
for line in lines:
    x1, y1, x2, y2 = line[0]
    cv.line(img, (x1, y1), (x2, y2), (0, 0, 255), 1)
    print(line[0])

cv.imwrite("./data/test_line.png",img)

cv.namedWindow('1', cv.WINDOW_NORMAL)
cv.imshow('1',img)

k = cv.waitKey(0)  # 无限等待一个键击,将此键击存在k变量中
if k == 27:         # 27代表esc,可以查看ascii码表
    cv.destroyAllWindows()  # 退出窗口

原图:

在这里插入图片描述

灰度化

在这里插入图片描述

二值化

在这里插入图片描述

直线检测

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值