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
'code' 카테고리의 다른 글
안드로이드 java.lang.NoClassDefFoundError (0) | 2021.01.07 |
---|---|
JavaScript 문자열에서 너비가 0 인 공백 문자 제거 (0) | 2021.01.07 |
Django 템플릿에서 변수를 사전 키로 사용 (0) | 2021.01.06 |
속성 설정자가 공용인지 확인하는 방법 (0) | 2021.01.06 |
Moq 모의 객체를 생성자에 전달 (0) | 2021.01.06 |