code

OpenCV 및 Python을 사용하여 웹캠 피드 표시

codestyles 2021. 1. 6. 08:23
반응형

OpenCV 및 Python을 사용하여 웹캠 피드 표시


OpenCV를 사용하여 웹캠에서 비디오 피드를 가져와 화면에 표시하는 Python 으로 간단한 프로그램을 만들려고했습니다 .

창이 만들어지고 웹캠의 표시등이 켜졌 기 때문에 부분적으로 거기에 있다는 것을 알고 있지만 창에 아무것도 표시되지 않는 것 같습니다. 누군가 내가 뭘 잘못하고 있는지 설명 할 수 있기를 바랍니다.

import cv

cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE)
capture = cv.CaptureFromCAM(0)

def repeat():

    frame = cv.QueryFrame(capture)
    cv.ShowImage("w1", frame)


while True:
    repeat()

관련없는 메모에서 나는 웹캠이에서 인덱스 번호를 변경하는 경우가 있으며 cv.CaptureFromCAM, 카메라가 하나만 연결되어 있고 플러그를 뽑지 않았는데도 0, 1 또는 2를 입력해야하는 경우가 있습니다. 인덱스를 변경하지 않으면 빛이 들어오지 않습니다.) Python이 올바른 색인을 결정하도록하는 방법이 있습니까?


방법 c = cv.WaitKey(10)의 맨 아래에 추가하십시오 repeat().

사용자가 키를 입력 할 때까지 10ms를 기다립니다. 키를 전혀 사용하지 않더라도 이것을 넣으십시오. 약간의 지연이 필요하다고 생각하므로 time.sleep(10)작동 할 수도 있습니다.

카메라 인덱스와 관련하여 다음과 같이 할 수 있습니다.

for i in range(3):
    capture = cv.CaptureFromCAM(i)
    if capture: break

이것은 적어도 0-2의 인덱스에 대해 첫 번째 "작동하는"캡처 장치의 인덱스를 찾습니다. 적절한 캡처 장치로 인식되는 컴퓨터에 여러 장치가있을 수 있습니다. 내가 아는 유일한 방법은 당신의 빛을 수동으로 보는 것입니다. 이미지를 가져 와서 속성을 확인 하시겠습니까?

프로세스에 사용자 프롬프트를 추가하려면 반복 루프에서 카메라 전환에 키를 바인딩 할 수 있습니다.

import cv

cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE)
camera_index = 0
capture = cv.CaptureFromCAM(camera_index)

def repeat():
    global capture #declare as globals since we are assigning to them now
    global camera_index
    frame = cv.QueryFrame(capture)
    cv.ShowImage("w1", frame)
    c = cv.WaitKey(10)
    if(c=="n"): #in "n" key is pressed while the popup window is in focus
        camera_index += 1 #try the next camera index
        capture = cv.CaptureFromCAM(camera_index)
        if not capture: #if the next camera index didn't work, reset to 0.
            camera_index = 0
            capture = cv.CaptureFromCAM(camera_index)

while True:
    repeat()

면책 조항 : 나는 이것을 테스트하지 않았으므로 버그가 있거나 작동하지 않을 수 있지만 최소한 해결 방법에 대한 아이디어를 줄 수 있습니다.


최신 버전의 OpenCV에서 수행하는 방법을 보여주는 업데이트 :

import cv2

cv2.namedWindow("preview")
vc = cv2.VideoCapture(0)

if vc.isOpened(): # try to get the first frame
    rval, frame = vc.read()
else:
    rval = False

while rval:
    cv2.imshow("preview", frame)
    rval, frame = vc.read()
    key = cv2.waitKey(20)
    if key == 27: # exit on ESC
        break

cv2.destroyWindow("preview")
vc.release()

나를 위해 OpenCV-2.4.2에서 작동합니다.


카메라가 하나만 있거나 어떤 카메라가 올바른지 신경 쓰지 않는다면 "-1"을 색인으로 사용하십시오. 예를 들어 capture = cv.CaptureFromCAM(-1).


다음을 시도하십시오. 간단하지만 아직 우아한 방법을 찾지 못했습니다.

import cv2.cv as cv
import time

cv.NamedWindow("camera", 0)

capture = cv.CaptureFromCAM(0)

while True:
    img = cv.QueryFrame(capture)
    cv.ShowImage("camera", img)
    if cv.WaitKey(10) == 27:
        break
cv.DestroyAllWindows()

변경 import cv하는 import cv2.cv as cv또한 게시물을 참조 여기에 .


opencv-doc 에서와 같이 다음 코드를 통해 컴퓨터에 연결된 카메라에서 비디오 피드를 가져올 수 있습니다.

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()

cap = cv2.VideoCapture(0)인덱스를에서 0변경 1하여 두 번째 카메라에 액세스 할 수 있습니다 .
테스트opencv-3.2.0

ReferenceURL : https://stackoverflow.com/questions/2601194/displaying-a-webcam-feed-using-opencv-and-python

반응형