2015-01-08 5 views
5

OpenCV를 사용하여 실험에서 만든 영화에 대한 계산을하고 있습니다. 이렇게하려면 영화의 일부 속성이 필요하며 영화 자체에서 자동으로 감지 할 수 있다면 편리 할 것입니다. 이 프레임 propId의 총 수에 대한 CV_CAP_PROP_FRAME_WIDTH해야한다고 아래python과 opencv로 영화 속성 얻기

cv2.VideoCapture.get(propId) → retval 

목록에서 다음 documentation에서 나는 다음과 같은 코드를 찾을 수 있습니다. 나는 코드의 정수를 입력하면

>> cap = cv2.VideoCapture('runoff.MOV') 
>> print cap.get('CV_CAP_PROP_FRAME_WIDTH') 
TypeError: an integer is required 

:

>> cap = cv2.VideoCapture('runoff.MOV') 
>> print cap.get(3) 
1920.0 

CV_CAP_PROP_FRAME_WIDTH이 문서의 목록에서 4 번째 항목은 실제로 내가 사용할 때 나는 다음을 시도 할 때 오류가 발생합니다 올바른 정수 카운터 3이 속성을 가져옵니다. 클래스 자체를 사용하고 모든 키, 정수 조합을 사용하여 사전을 작성하는 더 좋은 방법이 있는지 궁금합니다.

답변

10

CV_CAP_PROP_* 상수는 cv2.cv 모듈에서 액세스 할 수 있습니다 당신이 찾고있는 것을 cv2에 찾을 수 없다면 cv2.cv을 보는 것이 좋습니다. 예를 들어 cv2.CV_LOAD_IMAGE_*과 같은 일부 상수가 이동되었습니다. OpenCV의 3.1 사용을 위해 : - : - UPDATE

cap.get(cv2.CAP_PROP_FRAME_COUNT) 

기본적으로, 속성 이름이 수정되지 않은 및 시작에서 "CV_는"더 이상이 필요합니다. (답변 섹션의 Blane 대변)

0

당신은 이런 식으로 작업을 수행 할 수 있습니다

cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT) 

불행히도, 모든 유용한 것들이 너무 cv에서 cv2에서 포팅되었습니다

cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH) 
2

OpenCV 3.1을 사용하고 있으며 Hannes에서 제안한 위의 방법은 저에게 적합하지 않습니다. OpenCV 3.1에서는 메서드 호출과 속성의 이름 형식이 약간 업데이트 된 것 같습니다. 예를 들어, cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)은 OpenCV 3.1을 사용하여 AttributeError: 'module' object has no attribute 'cv'을 반환합니다. 코드에 대한 다음과 같은 사소한 수정은 나를 위해 일했습니다 : cap.get(cv2.CAP_PROP_FRAME_WIDTH)

속성 이름의 접두사로 더 이상 CV_가 필요하지 않습니다.