Python-Opencv激光测距

  • 前景

上文采用霍夫变换来获取坐标,可以看出直线误判了很多条所以改善了一下测距的方式改成用获取最小外接矩形的方式获取

测试图片

hsv调的数值,TrackBar调整hsv代码在上文, 获取hsv大小值后转到判断那里去

 效果图

这里是判断了很多矩形的但我们通过观察激光的特征后发现可以通过筛选激光的的高和宽来获取我们所要的目标矩形,有了目标矩形获取的坐标后,通过cv2.line就可以把这条线给连接起来了

                                要注意矩形框没法在hsv通道的图画出来的,想要画的话要进行转通道处理

这里是代码

import numpy as np
import cv2


def findLine(img):
    hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    lower = np.array([0, 0, 255])
    upper = np.array([147, 8, 255])

    mask = cv2.inRange(hsv_img, lower, upper)
    result = cv2.bitwise_and(img, img, mask=mask)
    cv2.namedWindow('result', 0)
    cv2.resizeWindow('result', (405, 394))
    cv2.imshow("result", result)
    return result




def rectangle(img, imgResult):
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    t, img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
    contours, hierarchy = cv2.findContours(img, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

    i = 0
    Coordinate = []
    Numberx = []
    Numbery = []
    Ylabel = []
    Xlabel = []
    for i in range(0, len(contours)):
            x, y, w, h = cv2.boundingRect(contours[i])
            i += 1
            if  w > 30 and h > 30:
                if w < 100:
                    Ylabel.append(y)
                    Coordinate.append(x)
                    cv2.rectangle(imgResult, (x, y), (x + w, y + h), (255, 20, 25), 20)
                    Numberx.append(x + w)
                    Numbery.append(y + h)

    cv2.line(imgResult, (Numberx[1], Numbery[1]), (Coordinate[0], Ylabel[0]), (0,255,0), 50)
    cv2.namedWindow('Canny', 0)
    cv2.resizeWindow('Canny', (405, 394))
    cv2.imshow("Canny", imgResult)
    return imgResult, Coordinate
while True:
        img = cv2.imread("02.jpg")
        cv2.resize(img, (405, 394))
        imgResult = img.copy()

        img = findLine(img)
        Result, Coordinate = rectangle(img, imgResult)
        print('左边坐标点为', Coordinate[0], '右边坐标点为', Coordinate[1])
        print('相差距离为', Coordinate[1]-Coordinate[0])



        cv2.waitKey()

要注意的是如果获取的图像信息,满足不了直线的数据会报错,就是图像处理后激光处理的太糊了,检测不出来矩形是会直接报错的

 所以我们在hsv那里一定要调整好我们的数值

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值