2011-09-15 2 views
3

OpenCV를 사용하여 한 번에 두 대의 카메라에서 캡처 한 프로그램을 작성하고 있습니다 (저는 스테레오 비전의 경우이를 수행하지 않습니다). 표준 OpenCV 기능 cvCaptureFromCAM()을 사용하여 cvQueryFrame()과 함께 두 개의 동일한 카메라에서 캡처를 얻으려면 while 루프 (각 캡처마다 한 번)에서 두 번 호출됩니다. cvNamedWindow에 표시 할 때 두 카메라에서 모두 가비지 이미지를 가져옵니다.OpenCV를 사용하는 여러 대의 카메라

또는 각 카메라를 자신의 POSIX 스레드 (따라서 동일한 주소 공간)로 실행하면 두 번째 스레드에서 세분화 오류가 발생합니다. 그 이유는 원인을 파악할 수 없기 때문입니다.

마지막으로 각 카메라를 자체 프로세스 (따라서 별도의 주소 공간)로 실행할 수 있으며 모든 것이 잘 실행됩니다. 내 의심은 다른 카메라에서 각 프레임 쿼리를 수행하기 전에 획득해야하는 일종의 잠금 유형 리소스가 있다는 것입니다. 다행히도 누군가가 동일한 프로세스와 동일한 스레드에서 두 캡쳐를 얻는 방법에 대한 아이디어가 있습니다. 감사!

+1

시도한 코드를 게시 할 수 있습니까? –

답변

0

어떤 OS입니까?

카메라와 드라이버에 따라 달라집니다. 특히 Directshow를 사용하는 Windows의 경우 특정 순서 또는 특정 방식으로 시작해야하는 경우 함께 작동하면 완전한 기회가 될 수 있습니다.

별도의 스레드에서 자신의 카메라를 실행하고 일부 중립 시스템에 대한 이미지 (명명 된 파이프, TCP 소켓, 램 디스크에있는 파일) 찾을 수를 적게 할 수있는 경우 각 스레드에 대한

0

더 신뢰할 COM 라이브러리를 사용하는 경우 ::CoInitializeEx(NULL,COINIT_MULTITHREADED)을 한 번 호출하고 캡처 작업을 마칠 때이를 초기화하지 않아야합니다.

동일한 프로세스와 동일한 스레드에서 두 캡쳐를 얻으려면 cvQueryFrame()에서 사용하는 버퍼에 대한 복사본을 할당 했습니까? 두 캡쳐가 cvQueryFrame()에서 같은 버퍼를 공유하고이 버퍼가 OpenCV 자체에 의해 실제로 유지되고 있다고 판단됩니다! 따라서 각 캡처에 대해 사본을 만들어 작동하는지보십시오.

희망이 있습니다.

관련 문제