¡El procesamiento de imágenes opencv basado en Python detecta el paso de cebra!

La idea basica

La detección de paso de cebra utiliza el procesamiento de imágenes opencv para realizar la conversión del valor gris, la eliminación de ruido del filtro gaussiano, el procesamiento de umbrales, la corrosión y la expansión para realizar la detección de contornos en la imagen, al juzgar la posición del vehículo y el peatón, y la información de distancia entre ellos, cuando se alcanza la velocidad del automóvil. Cuando excede un cierto umbral y está cerca del peatón, el vehículo será juzgado como un peatón descortés.

Resultado de ejemplo

proceso de experimento

Primero, tome una foto del video para probar y, si el resultado es satisfactorio, anímela en el video para lograr el efecto deseado.

1. Preprocesamiento (conversión de valor de gris, eliminación de ruido del filtro gaussiano, procesamiento de umbral, corrosión y expansión)> modifique algunos valores según sus necesidades


# Conversión de valor gris imgGray = cv2.cvtColor (copy_img, cv2.COLOR_BGR2GRAY) # Eliminación de ruido del 
filtro gaussiano 
imgBlur = cv2.GaussianBlur (imgGray, (5,5), 0) 
# 
Procesamiento de umbral ret, thresh = cv2.threshold (imgBlur , 127,255, cv2.THRESH_BINARY) 
# corrosión 
imgEro = cv2.erode (Thresh, kernel1, Iterations = 2) 
# expansion 
imgDia = cv2.dilate (imgEro, kernel2, iterations = 4)

Después del preprocesamiento (como se muestra en la figura siguiente):


2. Detección de contornos

# 轮廓 检测
_, contouts, hie = cv2.findContours (imgDia, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) 
cnt = contouts 
cv2.drawContours (copy_img, cnt, -1, (0, 255, 0), 2)

Esquema completo (como se muestra a continuación)

Se puede ver que esto no es lo que queremos, por lo que debemos juzgar la ubicación y seleccionar el área que nos interesa.

3. Región de interés

Cambie el valor de la información de posición de x, y, w, h según sus propias necesidades de imagen o video.

para i en cnt: 
    # 
    Asignación de coordenadas x, y, w, h = cv2.boundingRect (i) 
    #roi juicio de posición 
    si y> 350 e y <450 y x <1200 y w> 50 y h> 10: 
        # Dibujar Contour 
        cv2.drawContours (copy_img, i, -1, (0, 255, 0), 2)

El resultado completo después de obtener el roi (como se muestra en la figura siguiente)


4. Código completo

import cv2 
import numpy as np 
# defina dos núcleos (kernel_Ero se usa para la corrosión, kernel_Dia se usa para la expansión) 
kernel_Ero = np.ones ((3,1), np.uint8) 
kernel_Dia = np.ones ((3,5), np.uint8) 

img = cv2.imread ("../ images / bmx.png") 
copy_img = img.copy () # 
Imagen original copia modificar tamaño 
copy_img = cv2.resize (copy_img, (1600,800)) 
# 灰Conversión de valor de grado 
imgGray = cv2.cvtColor (copy_img, cv2.COLOR_BGR2GRAY) # Eliminación de ruido del 
filtro gaussiano 
imgBlur = cv2.GaussianBlur (imgGray, (5,5), 0) 
# 
Procesamiento de umbral ret, thresh = cv2.threshold (imgBlur, 127,255) , cv2.THRESH_BINARY) 
# corrosión 
imgEro = cv2.erode (Thresh, kernel_Ero, Iterations = 2) 
# expansión 
imgDia = cv2.dilate (imgEro, kernel_Dia, Iterations =. 4) 

# detección de contorno
_, contouts, hie = cv2.findContours (imgDia, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) 
cnt = contouts 

para i en cnt: 
    # 坐标 赋值
    x, y, w, h = cv2.boundingRect (i) 
    #roi 位置 判断
    if y> 350 e y <450 y x <1200 y w> 50 y h> 10: 
        # 画出 轮廓
        cv2.drawContours (copy_img, i, -1, (0, 255, 0), 2) 

cv2.imshow (" img ", copy_img) 
cv2.waitKey (0) 
cv2.destroyAllWindows ()

para resumir

En los requisitos comerciales, el resultado de este proceso no es factible, es solo enmarcar lo que desea, pero si desea juzgar si el vehículo es cortés con los peatones en la escena del tráfico, debe juzgar las coordenadas. Dibuje un marco rectangular grande (área de roi) desde las coordenadas del primer paso de cebra hasta las coordenadas del último paso de cebra (horizontal), y luego actúe sobre las coordenadas del vehículo de motor (coordenadas existentes) de acuerdo con las coordenadas del marco rectangular Juez, para atender la demanda.

¡Al final! ! !

¡Primer contacto con opencv! ¡Así que por favor no me rocíen, los grandes del campo visual! (/ 狗头) La
 
cantidad de código es muy pequeña, no hay capacidad de generalización, un enfoque muy bajo. . . ¡Pero para mí, aprender opencv sigue siendo muy útil! ¡Eso es! Ollie dalo!

Obtén el código completo del proyecto⬅ Obténgalo aquí

 

Supongo que te gusta

Origin blog.csdn.net/weixin_43881394/article/details/109095656
Recomendado
Clasificación