2016-06-12 7 views
0

Мы делаем проект в школе, где нам нужно выполнить базовую обработку изображений. Наша цель - использовать каждый видеокадр для малины Pi и делать обработку изображений в реальном времени.OpenCV & Python - обработка изображения в реальном времени

Мы попытались включить raspistill в нашу программу python, но до сих пор ничего не работало. Цель нашего проекта - создать RC-автомобиль, который следует за синей/красной/любой цветной линией с помощью обработки изображений.

Мы подумали, что было бы неплохо сделать программу-питон, которая требует всей обработки изображений, но в настоящее время мы боремся с идеей переноса записанных изображений в программу python. Есть ли способ сделать это с пикамерой или мы должны попробовать по-другому?

Для тех любопытных, это как наша программа в настоящее время выглядит

while True: 
    #camera = picamera.PiCamera() 
    #camera.capture('image1.jpg') 
    img = cv2.imread('image1.jpg') 
    width = img.shape[1] 
    height = img.shape[0] 
    height=height-1 
    for x in range (0,width): 
      if x>=0 and x<(width//2): 
        blue = img.item(height,x,0) 
        green = img.item(height,x,1) 
        red = img.item(height,x,2) 
        if red>green and red>blue: 

Спасибо заранее, anthrx.

+0

та же проблема, кроме окраски http://stackoverflow.com/questions/26169633/capturing-video-with-raspberry-using-opencvpicamera-stream-io –

ответ

2

OpenCV уже содержит функции для обработки данных в реальном камеры.

This OpenCV documentation обеспечивает простой пример:

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 

while(True): 
    # Capture frame-by-frame 
    ret, frame = cap.read() 

    # Our operations on the frame come here 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

    # Display the resulting frame 
    cv2.imshow('frame',gray) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

# When everything done, release the capture 
cap.release() 
cv2.destroyAllWindows() 

Конечно, вы не хотите, чтобы показать изображение, но все ваши обработки могут быть сделаны там.

Не забудьте спать несколько сотен миллисекунд, чтобы пи не перегрелся так сильно.

Edit:.

«. Как именно будет идти об этом, хотя я использовал„IMG = cv2.imread („image1.jpg“)“все время Что мне нужно использовать вместо того, чтобы получить «img» здесь? Что я использую? И что такое ret, для? :) «

ret указывает, было ли чтение успешным. Выйдите из программы, если нет.

Показанный frame - это не что иное, как ваш img = cv2.imread('image1.jpg'), поэтому ваш код обнаружения должен работать точно так же.

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

import cv2, time 

cap = cv2.VideoCapture(0) 

ret, frame = cap.read() 
if ret: 
    cv2.imwrite(time.strftime("%Y%m%d-%H%M%S"), frame) 

cap.release() 
+0

как бы я это сделал. Я использовал "img = cv2.imread ('image1.jpg')" все время. Что мне нужно использовать вместо этого, чтобы получить переменную «img» прямо здесь? Что я использую? И что такое ret? :) – anthrx

+0

См. Мое редактирование. –

+0

Большое спасибо, это действительно мило с вашей стороны. Я надеюсь, что у меня все получится. :) – anthrx

0

You может использовать пикамера для получения изображений.

Чтобы сделать это «реальное время», вы можете получать данные каждые X миллисекунд. Вам нужно установить X в зависимости от мощности вашего оборудования (и сложности алгоритма openCV).

Вот пример (из http://picamera.readthedocs.io/en/release-1.10/api_camera.html#picamera.camera.PiCamera.capture_continuous), как получить 60 кадров в секунду с помощью picamera:

import time 
import picamera 
with picamera.PiCamera() as camera: 
    camera.start_preview() 
    try: 
     for i, filename in enumerate(camera.capture_continuous('image{counter:02d}.jpg')): 
      print(filename) 
      time.sleep(1) 
      if i == 59: 
       break 
    finally: 
     camera.stop_preview() 
+0

эй, похоже, что-то я мог попробовать. Большое спасибо. :) – anthrx

+0

Я не вижу, где ваше предложение снизить скорость захвата оказывает какое-либо влияние на способность обработки PI. Один хочет, чтобы обработка изображений была как можно быстрее.Так что захватите изображение, проанализируйте, отреагируйте на результаты, повторите. Сделайте это как можно быстрее. Если вы можете быть быстрее, так как это разумно, * то * вы можете сделать паузу. Но в «сохранении» времени нет неотъемлемой ценности - вы не получите окупаемость позже. – deets

Смежные вопросы