OpenCV, camshift, projekt na studia

0

Witam,

chodzi o bardzo pilny projekt na studia. Za pomocą pakietu PiCamera uruchomiłem transmisję z kamery na Raspberry Pi. Chciałbym użyć tutaj funkcji camshift w celu śledzenia obiektu, który powinien się znajdować na środku. Przewiduję zmiany rozmiaru ROI w trakcie transmisji video. Nie do końca wiem jak użyć funkcji camshift żeby otrzymać zamierzony efekt?

Ktoś pomoże?

from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2

camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 40
rawCapture = PiRGBArray(camera, size=(640, 480))
time.sleep(0.3)

for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
image = frame.array

cv2.imshow("Frame", image)
key = cv2.waitKey(1) & 0xFF
rawCapture.truncate(0)
if key == ord("q"):
	break
0

Czytałeś przykłady?
https://docs.opencv.org/3.4.3/db/df8/tutorial_py_meanshift.html

Spróbuj podmienić przykładowy kod przechwytywania obrazu (poniżej) na swój (dla kamerki z raspberry pi), o ile to konieczne.

import cv2 as cv

cap = cv.VideoCapture('slow.flv')
# take first frame of the video
ret,frame = cap.read()

Możesz też sobie przetestować na webcamie podłączonym do zwykłego PC/laptopa ( https://github.com/jagracar/OpenCV-python-tests/blob/master/OpenCV-tutorials/videoAnalysis/camShift.py ) :

import cv2

# Start the webcam
cap = cv2.VideoCapture(0)

# Take the first frame
ret, frame = cap.read()
0

Tak, używałem tego przykładu, podmiana strumienia wejściowego również nic nie dała. Nie myślałem, że przetwarzanie obrazu to aż tak ciężki temat

0
czaq2 napisał(a):

Nie myślałem, że przetwarzanie obrazu to aż tak ciężki temat

Hola hola, to tylko początkowa konfiguracja/przymiarki. W dodatku udziwnione przez Raspberry Pi... Z webcamami na PC, przykłady OpenCV zawsze mi działały z marszu, na Linuksie i Windowsie.
Przetwarzanie obrazu bez gotowych metod (jak camshift) nie jest najprostsze, bo wtedy musisz te metody samemu zaimplementować. Tak że Twoim problemem nie jest przetwarzanie obrazu, tylko wstępne przymiarki do użycia OpenCV z Raspberry Pi.

Nie napisałeś żadnych szczegółów, co Ci nie działa?
Na początku napisałeś:

Nie do końca wiem jak użyć funkcji camshift żeby otrzymać zamierzony efekt?

To ci napisałem jak użyć funkcji camshift - trzeba jej użyć jak w przykładzie. Tylko musisz mu podać inne dane obrazu, bo pobierasz je w inny sposób.
Co Ci nie działa? Pobieranie obrazu z kamery? Camshift daje złe wyniki?

0

W VideoCapture wpisałem 0, powinno to dać strumien z kamery. Niestety nie działa, podmiana części odpowiedzialnej za transmisję z jakiegoś powodu też nie dało efektu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1