최근 내 프로젝트에서 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
내 카메라 설정이되어 같이
- 내 노트북의 내장 카메라
- 내 핸드폰 (화웨이 P9)은 DroidCamX (v6.4.8)을 사용합니다.
참고 : DroidCamX에는 Android DroidCamX 앱과 함께 작동하는 데스크톱 응용 프로그램이 있습니다.
참고 2 : (물리적/유선) USB 연결을 통해 DroidCamX를 사용하고 있습니다. (예상) 장치 인덱스 0
및 1
- - Python3의 출력을 완전히 올바른하게하기 때문에 의도 한대로 작동
나는 단지 2 물리적 카메라를 사용 가리키고입니다. 그러나 Python2를 사용하여 기기 색인 2-4
에 액세스하면 모두 내 휴대 전화에서 "올바른"비디오 피드를 반환합니다. 색인은 240P 비디오 피드를 지정하는 4
입니다.
따라서 제 질문은, 왜 Python2와 Python3의 출력이 다른가요? 왜 파이썬 2는 3 가지 다른 비디오 피드 (모두 "올바른 것"으로 보입니다)를 보여 줍니까?
참고 : 물리적 카메라의 수와 관련하여 올바르지 않은 올바른 모드로 올바른 물리적 장치를 사용하는 것과 관련하여 "정확함"이 사용됩니다.
주 2 : 모든 질문은이 질문의 길이를 최소화하기 위해 하이퍼 링크를 사용하여이 질문에 연결됩니다.