2013-07-03 5 views
1

내 게시물을 읽어 주셔서 감사합니다.OpenCV 프로그램 멀티 스레딩

opencv 응용 프로그램을 멀티 스레딩하는 데 문제가 있습니다. 여러분이 저를 도울 수 있기를 바랍니다.

더 많은 조사를 위해 비디오 시퀀스 중간에서 400 프레임 (jpeg로)을 저장하려고합니다.

나는 코드가 하나의 스레드로 잘 실행되지만 멀티 스레딩은 많은 문제를 일으키고 있기 때문에 모든 철학이 잘못되어 있는지 궁금합니다.

옵션 1 :

내가해야 할 일의 개략적 인 측면에서

, 나는에 가장 좋은 것입니다 어떻게 든 동시에 하나의 비디오 파일에 액세스 (또는 사본을 만들?), 그 다음 비디오를 순환 개별 스레드 프레임 단위로 미리 설정된 한계 사이에있을 때 각 프레임을 저장합니까? 예 : 스레드 1은 프레임 50 ~ 100을 저장하고 스레드 2는 프레임 101 ~ 150을 저장합니다.

옵션 2 : 파일을 한 번 열고 프레임 단위로 순환 한 다음 개별 프레임을 일련의 고유 한 스레드로 전달하여 저장합니다 조작. 예 : 프레임 1은 저장을 위해 스레드 1로, 프레임 2는 저장을 위해 스레드 2에, 프레임 3은 스레드 1에, 프레임 4는 스레드 2에 등등.

옵션 3 : 다른 버퍼/스레드 배열은 위!

저는 Visual C++를 표준 라이브러리와 함께 사용하고 있습니다. 이에 대한 당신의 도움을 위해

많은 감사,

건배, 케이

+0

우선 옵션 1을 시도해 볼 수 있습니다. 매우 합리적인 것 같습니다. 어떤 스레드도 데이터를 공유 할 필요가 없습니다. 이는 간단한 경우입니다 (실제로 옵션 2는 데이터를 공유 할 필요가 없음). 그러나 옵션 1은 더 효율적으로 보이지만 이제 조언은 "두 가지 옵션을 모두 시도해보고 어떤 것이 더 좋은지 확인하십시오."- 당신이 가지고있는 코어만큼 많은 스레드를 사용하십시오. OpenCV는 시작하려는 프레임 범위를 지정하는 방법을 원합니다. 함께 작업하므로 각 스레드가 프레임 0에서 시작하지 않아도됩니다. –

+0

안녕하세요, Chris O, 회신 해 주셔서 감사합니다. 옵션 1은 내가 지금까지 해보려고 시도했지만 오류 때문에 오류가 발생했는지 궁금합니다. 스레드가 대개 같은 파일에 액세스 할 수 있습니까? 내가 가질 수있는 스레드 수를 어떻게 알 수 있습니까? –

답변

1

옵션 1은 내가 지금까지이 작업을 수행하려고 것을이지만, 심지어 있다면 때문에 오류로, 내가 궁금 해서요 이것을 할 수 있습니다! 스레드가 대개 같은 파일에 액세스 할 수 있습니까? 얼마나 많은 스레드를 가질 수 있는지 어떻게 알 수 있습니까?

확실히 다른 스레드가 동일한 파일에 액세스 할 수 있지만 지원하는 라이브러리가 지원하는 경우 정말 의문입니다. 비디오 스트림을 읽으려면 OpenCV 또는 ffmpeg를 사용할 수 있습니다 (예를 들어 동일한 응용 프로그램에서 읽을 수는 ffmpeg, 처리에는 OpenCV를 모두 사용할 수 있음). 문서를 보지 않았으므로 여기에서 추측하겠습니다. lib 중 하나 일 경우은 동일한 파일에서 여러 독자를 허용해야합니다. this post에서

SYSTEM_INFO sysinfo; 
GetSystemInfo(&sysinfo); 
numCPU = sysinfo.dwNumberOfProcessors; 

:

는 코어의 수를 찾으려면. 하나의 스레드/코어를 시작점으로 만든 다음 성능 요구 사항과 실제 테스트를 기반으로 번호를 변경합니다.