OpenCV - 이미지 연산OpenCV - 이미지 연산
Posted at 2008/11/13 19:26 | Posted in Team Project
세번째 과제 이미지 연산.
두 이미지를 각각 덧셈, 뺄셈, 곱셈, 나눗셈, 그레이->Threshold 연산하는것
OpenCV내장 함수를 이용해 금방 뚝딱뚝딱~ 히히힛
이번엔 중복도 없고 나름 깔끔하게 코딩함 후후후훗 -ㅅ-
Threshold함수가 있다는걸 알려준 경섬군에게 감사하는 바입니다

두 이미지를 각각 덧셈, 뺄셈, 곱셈, 나눗셈, 그레이->Threshold 연산하는것
OpenCV내장 함수를 이용해 금방 뚝딱뚝딱~ 히히힛
이번엔 중복도 없고 나름 깔끔하게 코딩함 후후후훗 -ㅅ-
Threshold함수가 있다는걸 알려준 경섬군에게 감사하는 바입니다
OpenCV - 컬러 변환OpenCV - 컬러 변환
Posted at 2008/11/12 20:11 | Posted in Team Project두번째 과제 컬러변환하기.
이미지를 3채널로 분리하여 각각 RGB, YCrCb, HSV, HLS, XYZ, Lab, Luv로 나타내는 것이다
실력이 허접해서 소스는 무쟈게 길지만 그리 어렵지 않았던거같다
이걸 c로 코딩하려면 무쟈게 오래걸릴텐데... 역시 OpenCV는 좋구나아아~ -_ㅠ
RGB 채널분리모습
OpenCV - 이미지 줄이기 & RGB변환OpenCV - 이미지 줄이기 & RGB변환
Posted at 2008/11/10 04:44 | Posted in Team Project
오랫만에 OpenCV를 만져보면서 처음 시작한 과제.
이미지 파일을 출력하여 마우스 좌표 두곳을 입력받은후 그 범위에서
RGB평균값을 구해 새창에 출력하는 과제였다
역시 생각만큼 잘 되지 않았고 RyuiSaka군의 도움이 아니었다면 호롤대며 오그라졌을 과제지만
그래도 하나 끝내니 기분은 뿌듯하다
그러나 아직 갈길이 멀다 힘내자!!!

이미지 파일을 출력하여 마우스 좌표 두곳을 입력받은후 그 범위에서
RGB평균값을 구해 새창에 출력하는 과제였다
역시 생각만큼 잘 되지 않았고 RyuiSaka군의 도움이 아니었다면 호롤대며 오그라졌을 과제지만
그래도 하나 끝내니 기분은 뿌듯하다
그러나 아직 갈길이 멀다 힘내자!!!
MFC에서 VFW를 이용한 웹캠영상받기MFC에서 VFW를 이용한 웹캠영상받기
Posted at 2008/05/13 02:46 | Posted in Team Project
OpenCV를 이용하지않고 MFC를 사용한 웹캠영상받기이다.
VFW는 Video For Window의 약자로서 윈도우에서 비디오 장치를 연결하여 출력 하게끔 해주는 라이브러리다.
또 리눅스에서도 연결 하게 해주는 VFL(Video For Linux) 가 있다.
아래 내용을 펴보면 VFW라이브러리를 이용한 비디오 캡쳐방법을 확인 할 수 있다.

위의 그림에서 유심히 봐야 할것은 vfw헤더 파일 인클루드와 vfw32.lib 파일을 추가 시키는 것이다.
그리고 웹캠연결을 위한 소스는 다음과 같다.
위의소스는 웹캠연결만을 위한 소스 이며 실제로 위의 소스만 가지고는 웹캠으로 들어 오는 영상을 가지고
영상 처리를 하기에는 부적합하다.
VFW는 Video For Window의 약자로서 윈도우에서 비디오 장치를 연결하여 출력 하게끔 해주는 라이브러리다.
또 리눅스에서도 연결 하게 해주는 VFL(Video For Linux) 가 있다.
아래 내용을 펴보면 VFW라이브러리를 이용한 비디오 캡쳐방법을 확인 할 수 있다.
펴기
우선 이 라이브러리를 사용하기 위해 라이브러리 링크를 걸어야 하는데 링크를 거는 화면은 다음과 같다.
위의 그림에서 유심히 봐야 할것은 vfw헤더 파일 인클루드와 vfw32.lib 파일을 추가 시키는 것이다.
그리고 웹캠연결을 위한 소스는 다음과 같다.
void CCamTestView::initCam()
{
BITMAPINFO BmInfo;
m_HCam=capCreateCaptureWindow("Capture Window",WS_CHILD | WS_VISIBLE,
20,20,320,240,this->m_hWnd , NULL);
if(capDriverConnect(m_HCam,0)==false)
{
return ;
}
capGetVideoFormat(m_HCam, &BmInfo, sizeof(BITMAPINFO));
{
BITMAPINFO BmInfo;
m_HCam=capCreateCaptureWindow("Capture Window",WS_CHILD | WS_VISIBLE,
20,20,320,240,this->m_hWnd , NULL);
if(capDriverConnect(m_HCam,0)==false)
{
return ;
}
capGetVideoFormat(m_HCam, &BmInfo, sizeof(BITMAPINFO));
if(BmInfo.bmiHeader.biBitCount!=24)
{
BmInfo.bmiHeader.biBitCount=24;
BmInfo.bmiHeader.biCompression=0;
BmInfo.bmiHeader.biSizeImage=BmInfo.bmiHeader.biWidth*BmInfo.bmiHeader.biHeight*3;
capSetVideoFormat(m_HCam,&BmInfo, sizeof(BITMAPINFO));
}
capPreviewRate(m_HCam, 10);
capOverlay(m_HCam, false);
capPreview(m_HCam, true);
}
{
BmInfo.bmiHeader.biBitCount=24;
BmInfo.bmiHeader.biCompression=0;
BmInfo.bmiHeader.biSizeImage=BmInfo.bmiHeader.biWidth*BmInfo.bmiHeader.biHeight*3;
capSetVideoFormat(m_HCam,&BmInfo, sizeof(BITMAPINFO));
}
capPreviewRate(m_HCam, 10);
capOverlay(m_HCam, false);
capPreview(m_HCam, true);
}
위의소스는 웹캠연결만을 위한 소스 이며 실제로 위의 소스만 가지고는 웹캠으로 들어 오는 영상을 가지고
영상 처리를 하기에는 부적합하다.
위의 방식에다 콜벡함수에 영상 데이터를 넘겨 주는 방식이 있는데, 그 방식을 사용하면 쉽게 영상의
실제 데이터를 실시간으로 획득 할 수 있으며 쉽게 영상을 처리 할 수 있게 된다.
위에 VFW라이브러리 함수에도 설명되어있지만 위 소스에 나온 함수를 다시한번 살펴보면 다음과 같다.
===================================================================
실제 데이터를 실시간으로 획득 할 수 있으며 쉽게 영상을 처리 할 수 있게 된다.
위에 VFW라이브러리 함수에도 설명되어있지만 위 소스에 나온 함수를 다시한번 살펴보면 다음과 같다.
===================================================================
HWND capCreateCaptureWindow(name, style, x, y, width, height, hWnd, id);
- 이 함수는 캡쳐 윈도우를 만든다.
매개 변수는 순서대로 윈도우 이름, 스타일, 윈도우 좌측 상단 좌표, 캡쳐윈도우 크기, 부모 윈도우 핸들값, 윈도우 식별 번호 를 입력을 하면 된다.
캡쳐 윈도우가 정상적으로 생성되면 캡쳐 윈도우 핸들이 반환 되고 그렇지 않다면 NULL이 반환 된다.
BOOL capDriverConnect(hWnd, index);
- 이 함수는 캡쳐윈도우를 드라이버에 연결을 한다.
매개 변수는 순서대로 윈도우 핸들, 캡쳐 드라이버 번호를 나타낸다.
성공하면 TRUE를 그렇지 않다면 FALSE를 반환한다.
DWORD capSetVideoFormat(hWnd, format, format_size);
- 이 함수는 캡쳐된 비디오 데이터 형식을 설정한다. 데이터 형식이 캡쳐 장치에서 지원 가능하면
TRUE, 그렇지 않다면 FALSE값을 반환한다
매개 변수는 순서대로 윈도우 핸들, 비디오 데이터 구조(BITMAPINFO 구조체), 구조체의 크기를 입력하면 된다.
capGetVideoFormat함수는 설정이 아니라 설정된 값을 가져 오는 함수라 생각하면 된다.
BOOL capPreviewRate(hWnd, rate);
- 이 함수는 프레임 재생 속도를 설정 한다.
매개 변수는 순서대로 윈도우 핸들, rate는 ms의 단위의 시간으로 설정한다.
예를 들어 66으로 설정하면 0.066초마다 프레임을 캡쳐해서 보여준다. 1초에 15개의 프레임을 보여 준다는 것이다.
BOOL capOverlay(hWnd, f);
- 이 함수는 비디오 오버레이를 사용 할것인지 아닌지를 설정한다. 설정 성공시 TRUE, 그렇지 않을경우 FALSE를 반환한다.
매개변수는 순서대로 윈도우 핸들, 설정시-true 미설정시 -false
비디오 오버레이를 사용하면 CPU자원이 요구 되지 않아 효과적이라고 한다.
BOOL capPreview(hWnd, f);
- 이 함수는 미리보기 모드를 동작 시킬 것인지 아닌지를 설정한다. 설정을 하게 되면 영상 프레임이 시스템의 메모리로 전달되어 GDI함수를 사용하여 캠처 윈도우에 영상을 출력하게 된다.
매개 변수는 순서대로 윈도우 핸들, 설정시 -true, 미설정시 -false
===================================================================
※첨부파일로 OpenCV홈페이지의 관련게시물에서 받은 소스파일을 올리니 참고하기바람.
===================================================================
※첨부파일로 OpenCV홈페이지의 관련게시물에서 받은 소스파일을 올리니 참고하기바람.
[출처] VFW 라이브러리 설명|작성자 마인드온
[출처] MFC에서 VFW를 이용한 웹캠 연동 (간단!)|작성자 봉봉월드
위의 내용이 복잡하다면 플래시로 만든 동영상 강의도 있다. (다보진않았다 -_-;;)
아래 주소로 가서 동영상을 본다면 좀더 쉽게 구현할수 있을것이다.
보러가기
OpenCVOpenCV
Posted at 2008/05/04 05:46 | Posted in Team ProjectOpenCV(영어: Open Computer Vision)은 오픈소스 컴퓨터 비전 C 라이브러리이다. 원래 인텔에서 개발되었다. 현재 버전 1.0이 나와있으며 윈도, 리눅스 플랫폼에서 사용할 수 있다. 실시간 이미지 프로세싱에 중점을 둔 라이브러리이다. 인텔 CPU에서 사용되는 경우 속도의 향상을 볼 수 있는 Intel Performance Primitives (IPP)를 지원한다.
성공적인 애플리케이션
- 2005년 다르파 챌린지 경주에서 우승한 로봇 자동차 스탠리의 시각 시스템에서 OpenCV를 사용한다.
- 곤충등의 자취를 추적하는 소프트웨어인 SwisTrack은 OpenCV를 사용한다.
링크
- OpenCV 공식사이트
- OpenCV 문서화 위키
- OpenCV 소스포지
- Great summary cheat sheet 유용한 프로그래밍 서머리
간단한_PC캠_출력.zip