반응형

개발/Computer Vision 32

[OpenCV] 두 대의 노트북에서 똑같은 웹캠 관련 소스 코드 테스트 했을 때 결과는?

필자는 평소에 [그림 1: A 노트북]을 사용한다. 그런데 뭘 Tracking 하던지 잘 되지 않았다. 이번에 하는 프로젝트의 일부인 손을 Tracking 할 시에 자꾸 잡음이 너무 많이 껴서 결국 [그림 2: B 노트북]으로 똑같은 소스 코드를 실행했을 시에 잡음이 생기는 정도가 다르게 되었다. A의 노트북 스펙i7-6700HQ-2.60GHz디스플레이 해상도 1920 * 1080램 16기가 B의 노트북 스펙i7-4712MQ-2.30GHz디스플레이 해상도 1366 * 768램 16 기가 결국 네이버 OpenCV 카페에 질문했고 해결 방안?을 찾을 수 있었다..답변: LCD해상도와는 관계 없이 "같은 입력" 이라면 비슷한 결과를 보여야 합니다.다만 같은 입력을 만족하려면 카메라가 다르면 안됩니다.촬영 환경..

[OpenCV] YCrCb 모델을 이용한 손 검출

나는 아시아에서 태어난 황인종이다. 즉, 나의 피부를 검출하려면 황색을 검출한다고 할 수가 있다.그렇다면 황색의 Cb, Cr 값은 얼마일까? Cb: 77 ~ 127Cr: 133 ~ 173(사실 나도 떠돌아다니는 블로그에서 주워들음) 그렇다면 이 값들을 이용하기 위해 해당 이미지가 담겨있는 Mat형 변수를 OpenCV에 있는 함수인 cv::cvtColor에서 YCrCb로 바꿔줘야한다. 그렇다면 이제 황인 전용 값들 만을 찾을 수 있도록 해줘야하는데 cv::inRange()함수를 사용하면 된다. 소스 코드에서 알아서 이해하자 :) 저번 소스에서 재활용한 소스 코드라서 변수가 들쑥날쑥하다. 알아서 좀 더 깔끔하게 짜도록 하자 :) [그림 2]는 내가 따로 [그림 1]의 frame을 가져와 frame을 제외한 ..

[영상처리] 색상 모델(Gray, HSV, RGB, YCbCr)

코딩을 하다 보면 내가 어떤 색상 모델을 선택해야하는 지 고민이 올 때가 있다.매번 RGB, GRAY, HSV, YCbCr 이 뭐였는지 까먹어서 인터넷으로 찾고 그럴 때가 있는데 그래서 다시 복습할 겸 정리를 한다. 우선 내가 자주 사용하는 모델인 이 4가지 (RGB, GRAY, HSV, YCbCr)에 대해서 작성하도록 하겠다. [RGB 모델] RGB 모델은 RED, GREEN, BLUE 세종류의 광원을 이용하여 색을 혼합한다. 각각의 R, G, B는 0 ~ 255의 숫자가 들어가며 색을 혼합할 수 록 밝아 진다. (0, 0, 0) : 검정(255, 255, 255) : 하양(255, 0, 0) : 빨강(0, 255, 0) : 초록(0, 0, 255) : 파랑(255, 255, 0) : 노랑(0, 255..

[OpenCV] 영상에서의 히스토그램 구하기

실시간 영상에서의 히스토그램을 측정하고 그래프로 나타내는 소스 코드입니다. 히스토그램 그래프에서 y축은 픽셀의 빈도수를, x축은 픽셀값들을 나타냅니다. #include #include int main(){cv::Mat frame, tmpImg;cv::Mat hist; cv::VideoCapture video(0); cv::namedWindow("image", CV_WINDOW_AUTOSIZE);cv::namedWindow("histogramImg", CV_WINDOW_AUTOSIZE);const int ch[] = { 0 };const int size = 256;float ch_range[] = { 0,255 };const float * range = { ch_range }; double minVal =..

[OpenCV] cvCalcOpticalFlowPyrLK 를 이용한 Tracking (Optical flow)

우선 밤을 샛다. 무슨 정신으로 짰는지는 모르겠지만 뿌듯하다. 고민을 많이 했는데 while문 안에서 count 를 1씩 증가해놓게 하고 count %2 == 0 이면 previous 변수에 현재 화면을 저장, count % 2 == 1이라면 current 변수에 현재 화면을 저장하는 식으로 해서 이 두 변수를 가지고 특징점의 차이를 이용해 했다. 왼쪽 상단은 왜 그러는지 도대체 모르겠다. 정신도 없고 고치고 싶은 마음이 밤을 새서 하기가 싫다. 자고 싶다. 빨리 취업ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 이제 남은 작업은 화살표를 붙이는 일만 남았는데 넘나 귀찮다. 그리고 최적화

[OpenCV] 실시간 corner 검출 프로그램

#include int main(){cv::VideoCapture capture(0);cv::namedWindow("camera", CV_WINDOW_AUTOSIZE); cv::Mat tmpVideo;cv::Mat gray;IplImage* video, *image;CvPoint2D32f* corners = new CvPoint2D32f;int num = 100; while (true){ /*귀찮지만 cvGoodFeaturesToTrack 는 IplImage형 변수에서만 작동되므로 형변환을 거쳐야 했다.ㅠㅠㅠㅠㅠㅠㅠㅠㅠ*/ capture >> tmpVideo;cv::cvtColor(tmpVideo, gray, CV_BGR2GRAY); video = &IplImage(gray);image = &IplIma..

[C++] Cam Shift 를 이용한 영상 추적 프로그램

Mean Shift의 알고리즘을 향상시킨 Cam Shift 알고리즘을 사용한 영상 추적 프로그램입니다. 지금 개발 중인 프로그램은 Optical flow 를 이용해 사물, 사람의 움직임을 벡터로 나타내고 이것을 이용해 자동차가 주행 중에 어느 방향으로 가는 것인지를 인식하는 프로그램을 개발 중입니다. 네이버 OpenCV 카페가 많이 도움되었고 저한테는 이 카페를 알 수 있던 것이 행운이였던 것 같습니다.

[영상 처리] Optical flow (수정)

Optical flow - wikipedia.org Optical flow or optic flow is the pattern of apparent motion of objects, surfaces, and edges in a visual scene caused by the relative motion between an observer (an eye or a camera) and the scene. Optical flow 또는 optic flow 는 움직임의 objects, surface, and edges가 들어있는 시각적인 장면을 야기하는 상대 운동과 목격자의 중간, 그리고 장면의 분명한 패턴이다. (영알못) 넘나 어렵다. 사실 뭐라고 하는 것인지 모르겠다. 1. Optical flow 를 사용할 ..

반응형