2009-10-25 10 views
0

두 스레드가 곧 3 개가되어 두 스레드에서 동시에 웹 캠에서 이미지를 가져 오려고하는 프로그램을 만들었습니다. 이 작업을 수행 할 수있는 방법이 있습니까? 아니면이 작업을 수행하는 더 좋은 방법이 있습니까? (openCV 1.1 사용)OpenCV 다중 스레드 호출

+1

흠, 정말로 당신의 질문에 대해 자세히 설명해야합니다. 왜 동시에 두 개의 스레드에서 동일한 이미지를 얻으려고합니까? 현재 실행중인 코드에 특정 문제가 있습니까? – DeusAduro

답변

0

두 스레드가 모두 이미지 작업을 할 수있게하려면 현재 이미지를 제공하는 메서드를 작성해야합니다. 메서드가 처음 호출 될 때 캠에서 이미지를 가져올 수 있고 이미지가로드 될 때까지 호출을 차단할 수 있습니다. 그런 다음 버퍼링 된 이미지를 가져올 때까지 다음 이미지를 가져올 수 있습니다. 이 방법을 사용하면 두 스레드가 모두 동일한 경로를 사용하여 OpenCV가 카메라 연결을 시도 할 필요가 없으며 이미지가로드되지 않은 상태에서만 블로킹하는 경우 여러 스레드가 이미지 데이터를 저장 한 후 가져올 수 있습니다 동시.

1

스레드 중 하나 (기본 호출이라고 함)가 카메라와 대화하고 이미지를 가져 와서 모든 설정을 가져 오는 것이 좋습니다. 일단 설정되고 메모리의 한 위치에 놓이면 그 위치가있는 두 번째 쓰레드에 알릴 수 있습니다 (이 작업에서 뮤텍스를 사용하십시오). 두 쓰레드가 모두 빠져 나와 처리 할 수 ​​있습니다. 두 스레드가 해당 이미지로 완료되면 (여기에도 뮤텍스를 사용하십시오.) 기본 스레드가 다른 이미지를 가져 와서 프로세스를 시작할 수 있습니다.

카메라가 많은 양의 이미지를 생성하고 두 스레드가 모두 완료되기 전에 작업을 시작하려는 경우 세 개의 스레드로 이동하는 것이 좋습니다. 하나는 이미지를 얻는 것이고 다른 하나는 이미지를 가져 오는 것입니다. 두 가지 유형의 처리를 수행하는 것입니다. 여러 개의 버퍼가 있어야하므로 훨씬 더 복잡해집니다. 또한 아마도 여러 뮤텍스와 아마도 두 개의 큐가 필요할 것입니다. 모든 것이 가능합니다 :-)