2017-11-18 1 views
1

최근 내 프로젝트에서 OpenCV의 VideoCapture()에 대한 소스 입력 (장치 인덱스)과 연결된 장치 (장치 이름)를 식별해야 할 필요성이 생겼습니다.파이썬 버전을 기반으로하는 C++ python 확장의 차이점

OpenCV의 Python 포트 (PyCharm에 따라 v3.3.0.10)를 사용하고 있기 때문에 연구 노력에 따라 Python에서 내 조작에 사용할 수없는 다양한 백엔드 기능이 있습니다.

Windows 10 Home 64 비트를 사용하고 있고 Python 3.6.3을 사용하여 Xiao Ling이 만든이 handy work이 정확히 필요에 맞게 전용 Python2 확장을 생성했습니다. C++ file을 사용하여 Python3의 documentation을 사용하여 Python3 compatible으로 만들면 성공적으로 컴파일됩니다. 나는 그 때 시험을 달리고 그것은 나의 기대에 일했다.

단순한 호기심에서

, 파이썬 2.7.14을 가진에 손 (참고 : OpenCV의의 v3.3.0.10도 내 Python2 설치되어 - PyCharm에 따라), 내가 나서서 같은 C를 컴파일 ++ 확장 Python2에서는 같은 setup.py을 사용합니다. 그것은 성공적으로 컴파일 된 후, 나는 동일한 test.py을 실행했지만 ... 다른 결과를 얻었습니다.

파이썬 3가 (제대로)입니다 위해 다음과 같이 내가 test.py를 실행할 때의 결과 :

참고 :이 사용자 입력을 기다리는 동안 내가 런타임에 코드를 중단했다.

OpenCV version: 3.3.0 
0: DroidCam Source 3 
1: Integrated Webcam 
Select a camera (0 to 1): 
Process finished with exit code 1 

그리고, Python2에 대한 결과 ... 또한 "올바른"다음 내 노트북에

OpenCV version: 3.3.0 
0: DroidCam Source 3 
1: Integrated Webcam 
2: DroidCam Source 1 
3: DroidCam Source 2 
4: DroidCam Source Mini (240p) 
Select a camera (0 to 4): 
Process finished with exit code 1 

내 카메라 설정이되어 같이

  1. 내 노트북의 내장 카메라
  2. 내 핸드폰 (화웨이 P9)은 DroidCamX (v6.4.8)을 사용합니다.

참고 : DroidCamX에는 Android DroidCamX 앱과 함께 작동하는 데스크톱 응용 프로그램이 있습니다.

참고 2 : (물리적/유선) USB 연결을 통해 DroidCamX를 사용하고 있습니다. (예상) 장치 인덱스 01 - - Python3의 출력을 완전히 올바른하게하기 때문에 의도 한대로 작동

나는 단지 2 물리적 카메라를 사용 가리키고입니다. 그러나 Python2를 사용하여 기기 색인 2-4에 액세스하면 모두 내 휴대 전화에서 "올바른"비디오 피드를 반환합니다. 색인은 240P 비디오 피드를 지정하는 4입니다.

따라서 제 질문은, 왜 Python2와 Python3의 출력이 다른가요? 왜 파이썬 2는 3 가지 다른 비디오 피드 (모두 "올바른 것"으로 보입니다)를 보여 줍니까?

참고 : 물리적 카메라의 수와 관련하여 올바르지 않은 올바른 모드로 올바른 물리적 장치를 사용하는 것과 관련하여 "정확함"이 사용됩니다.

주 2 : 모든 질문은이 질문의 길이를 최소화하기 위해 하이퍼 링크를 사용하여이 질문에 연결됩니다.

답변

1

DroidCam 소스 1, 2 및 미니 (240p)는 DirectShow 비디오 소스 필터입니다. 파이썬 3 중 하나는 DirectShow를 지원하지 않거나, 그 사용법이 기본적으로 비활성화되어 있다고 가정합니다. 소스 3 및 통합 웹캠은 완전히 손상된 커널 드라이버를 사용합니다.

관련 문제