아.. openCV를 쓰다가.. openCV 캠입력은 윈도우나 하드웨어나 여러가지 특성때문에 가끔 화면 출력이 안되는 경우가 있다.
(화면이 완전 회색이거나 완전 검정)

 그래서 검색을 하고, 하고 또 하다가.. 웹캠을 DirectShow로 출력하라는 글을 보았다.

 그때 부터 바로 서치를 시작했지만.. 필터니, 그래프니.. 이건.. 생전 처음 듣던 용어 들이였다. 물론 좀 더 공부를 해 나가다 보면  익숙해 지겠지만.. 일단은 지금 시간이 없는지라 계속 검색을 하던 중.. 한 클래스를 발견했다. ( 역시 구글~) 

 클래스 작성자가 공개를 해 놓은 것이라.. 써도 될 것 같아서.. 일단 가져와서 쓰고 여기다가도 공유를 해 놓는다.
( 문제가 생긴다면 답글을 달아주시면 바로 삭제하겠습니다. )

 일단 저 클래스를 추가를 하고, main.cpp를 만든 다음에 아래의 예제를 붙이면 된다.

#include <cstdio>
#include "VideoCapture.h"

#define TEST(x) printf("\nPress enter to test: " #x); getchar(); fflush(stdin); x;

void callback(unsigned char* data, int len, int bpp)
{
       printf("DATA %d %d\n",len, bpp);
}

int main()
{
 VideoCapture* vc        = new VideoCapture(callback);

 VideoDevice* devices    = vc->GetDevices();

 int num_devices         = vc->NumDevices();

 for (int i=0; i<num_devices; i++)
 {
  printf("%s\n", devices[i].GetFriendlyName());
 }
 
TEST(vc->Select(devices));
TEST(vc->Start());
 //TEST(vc->Select(devices));
 //TEST(vc->Stop());
 //TEST(vc->Start());
 //TEST(vc->Stop());
 
 printf("Done testing...");

 getchar();
 
 return 0;
}

ps. 물론 dshow가 설치된 경로를 프로젝트에 속성에서 추가를 해주어야 정상적으로 동작을 할 것이다. 
 또 dshow가 컴파일을 하며 내부 .h 에 의한 에러가 난다면 유용한 팁의 다른 글을 참조 하시면 쉽게 해결 될 것이다.

 

 

 

Posted by 바람처럼..
|