• 开始检测前首先对图像进行处理
  • 处理的思路有很多种:
  1.         深度学习获得红线的位置, 这个没时间就不展示了
  2. 为了能快速进行图像的处理,这里采用了TrackBar滑动条提取图像红线的信息, 这里讲一下一些关于的用法,要注意的是这个方法鲁棒性特别差。
  1. TrackBar:         cv2.的一个滑动条函数,能够使变量通过滑动的方式调整。   
  2. 首先就是在本文中的用法, 利用TrackBar提取图像特定的颜色。
  3. 第二种,利用TrackBar调整Canny的值,可以快速得到图像的想要的轮廓。
  4. 第三种, 利用TrackBar调整二值化的值,获得想要的信息。
  5. 还能调整滤波,获得自已想要的前景和背景。
  6. 本文通过TrackBar调整Hsv的代码会放在后面.
  1. 经过图像处理后,我们以及获取到我们想要的图像了,之后就可以利用cv2的函数进行获取距离, 大概简单的思路
  1. 通过简单的Canny获取激光的轮廓
  2. 霍夫变换,鲁棒性也是比较差的有时间的话最好还是通过深度学习的方式来获取坐标
  3. 获取到一条直线坐标(x1, y1, x2, y2)后   [要注意的是,这里X1 == X2]
  4. 将所有直线的x坐标输出来,你会发现检测了很多条没用的直线,这是因为图像的激光并不是直的所以这个检测出很多直线,那我们只要将X坐标偏差一点点的全都取平均数就好了,这里我是直接取一个用了,然后X坐标差值大的自然就是宁外一段激光了,
  1. 这里还有一种比较好的办法就是对两条线段取外接矩形获取那个矩形末端的两个坐标取平均值来算距离

开始上测试图和代码

                                        目标图像(素材图)

                

python获取红外图像温度 python红外发射_人工智能

 Hsv图像处理

不同的图像Hsv都要重新调整,因为光照因素的都不一样,这也就是为什么鲁棒性差

python获取红外图像温度 python红外发射_Max_02

这是测试的图像 

python获取红外图像温度 python红外发射_python_03

 最终处理的结果

python获取红外图像温度 python红外发射_python获取红外图像温度_04

     看到抗揍云的代码都没什么人下, 我就直接放出来了

TrackBar代码,在这里调整好数值去最后的测试代码上Hsv的最大值和最小值

import cv2
import numpy as np
import numpy as py
img = cv2.imread("01.jpg")

def empyt(sum):
    pass

cv2.namedWindow('TrackBar')
cv2.resizeWindow('TrackBar', 640, 320)

cv2.createTrackbar("Hue Min", 'TrackBar', 0, 179, empyt)
cv2.createTrackbar("Hue Max", 'TrackBar', 179, 179, empyt)
cv2.createTrackbar("Sat Min", 'TrackBar', 0, 255, empyt)
cv2.createTrackbar("Sat Max", 'TrackBar', 255, 255, empyt)
cv2.createTrackbar("Val Min", 'TrackBar', 0, 255, empyt)
cv2.createTrackbar("Val Max", 'TrackBar', 255, 255, empyt)

hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
while 1:
    h_min = cv2.getTrackbarPos("Hue Min", 'TrackBar')
    h_max = cv2.getTrackbarPos("Hue Max", 'TrackBar')
    s_min = cv2.getTrackbarPos("Sat Min", 'TrackBar')
    s_max = cv2.getTrackbarPos("Sat Max", 'TrackBar')
    v_min = cv2.getTrackbarPos("Val Min", 'TrackBar')
    v_max = cv2.getTrackbarPos("Val Max", 'TrackBar')
    print(h_min, h_max, s_min, s_max, v_min, v_max)

    lower = np.array([h_min, s_min, v_min])
    upper = np.array([h_max, s_max, v_max])

    mask = cv2.inRange(hsv_img, lower, upper)
    result = cv2.bitwise_and(img, img, mask=mask)

    cv2.namedWindow('mask', 0)
    cv2.resizeWindow('mask',  (405, 394))
    cv2.namedWindow('img', 0)
    cv2.resizeWindow('img', (405, 394))
    cv2.namedWindow('hsv_img', 0)
    cv2.resizeWindow('hsv_img', (405, 394))
    cv2.namedWindow('result', 0)
    cv2.resizeWindow('result', (405, 394))
    cv2.imshow("mask", mask)
    cv2.imshow("img", img)
    cv2.imshow("hsv_img", hsv_img)
    cv2.imshow("result", result)
    cv2.waitKey(1)


cv2.waitKey()

Text的代码

import numpy as np
import cv2


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

    lower = np.array([0, 0, 242])
    upper = np.array([38, 48, 255])

    mask = cv2.inRange(hsv_img, lower, upper)
    result = cv2.bitwise_and(img, img, mask=mask)
    # cv2.imshow("result", result)
    return result

def HoughLine(img):
    img = cv2.medianBlur(img, 5)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img = cv2.Canny(img, 150, 200)
    cv2.namedWindow('Canny', 0)
    cv2.resizeWindow('Canny', (405, 394))
    cv2.imshow("Canny", img)


    lines = cv2.HoughLinesP(img, 1,  np.pi/180,  7,  20,  20)
    i = 0

    for line in lines:

        x1, y1, x2, y2 = line[0]
        i+=1
        print('This  Line',i, x1)
        cv2.line(img, (x1, y1), (x2, y2), (255,22,255), 3)

        if i == 4:
            print('This  Line', i, x1,y1)
            cv2.line(img, (x1, y1), (165, y1), (255,20,25), 5)
            return x1, y1
    cv2.imshow("HoughLine", img)
def Result(img, x1, y1):
    cv2.line(img, (x1, y1), (165, y1), (255, 20, 25), 5)
    print('两激光线长', x1 - 165)
    cv2.namedWindow('Result', 0)
    cv2.resizeWindow('Result',  (405, 394))
    cv2.imshow("Result", img)


while True:
        img = cv2.imread("01.jpg")
        imgResult = img.copy()
        cv2.resize(img, (405, 394))

        img = findLine(img)

        x1, y1 =  HoughLine(img)
        Result(imgResult, x1, y1)
        cv2.waitKey()