2017-01-30 10 views
1

Я пытался создать систему помощи вождению с использованием python и OpenCV. Я использовал бинарный порог, чтобы линии линий были белыми.OpenCV - Как получить последнюю позицию белых пикселей в видео?

Как я могу получить последнее значение X белых пикселей? Я только нашел руководства по обнаружению лиц и линий.

Вот Video

Текущий код:

#Video Feed 
ret, frame = cap.read() 

#Grayscale 
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

#thresholding 
thresh = cv2.threshold(gray, 140, 255, cv2.THRESH_BINARY)[1] 
+0

Как вы хотите получить последнюю позицию? (а) в каждом кадре? или (b) в конце видеопотока? –

+0

В каждом кадре (в прямом эфире) я хочу использовать последнее известное значение X для белой строки – Ingmar05

ответ

2

Вы можете использовать nonzero() функцию numpy модуля. Это дает вам импульсы, отличные от нуля, соответствующие белым пикселам вашего порогового изображения. Затем вы можете получить доступ к координатам x, используя whites[0]. Например, значение последнего белого пикселя в наивысших координатах x и y равно thresh[whites[0][len(whites[0])-1]][whites[1][len(whites[1])-1]]

import numpy 
import cv2 

#Video Feed 
ret, frame = cap.read() 

#Grayscale 
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

#thresholding 
thresh = cv2.threshold(gray, 140, 255, cv2.THRESH_BINARY)[1] 

# get indices of all white pixels 
whites = numpy.nonzero(thresh) 

# print the last white pixel in x-axis, 
# which is obviously white 
print thresh[whites[0][len(whites[0])-1]][whites[1][len(whites[1])-1]] 
+0

Это, безусловно, будет работать: D –

+0

Он работает, когда я использую его с порогом, но теперь у меня есть функция кадрирования: 'leftframe = thresh [700: 800, 250: 550] 'и когда я пытаюсь использовать его с левым рисунком' whites = np.nonzero (leftframe) 'я получаю ошибку в строке печати' IndexError: index -1 вне границ для оси 0 с размером 0' – Ingmar05

+0

Могу ли я определить область, в которой будет искать ненулевое()? – Ingmar05