250x250

Xtra의 그 무엇

블로그 이미지
욕심많아 진도 느린 Xtra입니다.
by Xtra
  • Total hit
  • Today hit
  • Yesterday hit

728x90
728x90

개인적은 원한으로 영상에서 물체를 탐지하는 기술이 필요했습니다.


요즘은 옛날과 달리 소스를 구하기 쉬우니 당연히 쉬울거라 생각했습니다.


5일 걸렸습니다.


제가 소화했으니 쉬운것 맞습니다.


설렁설렁 했습니다. 자랑이 아니라 정말 쉬운 편이라고 말하고 싶습니다.



도움이 필요하신 분은 네이버 카페 koreaOpencv(http://opencv.co.kr)를 찾아가세요.


저도 오늘 알아서 아직 들어가보지는 않았습니다.






일단 OpenCV 알을 알던것이 아니라 접하게 된것 부터 신기합니다.


구글에


"영상 물체 탐지"

"영상 물체 추적"

"영상 물체 구분"


인식 판별 등등 막 적다보니까 OpenCV 알이 제 눈에 들어왔습니다.


공식 홈페이지도 바로 검색되서 튜토리얼이 있었지만 전 욕심이 많아서 속성 공부가 하고 싶었습니다.


닭치고 예제 중에 영상에서 물체 구분하는 방법 부터 봤습니다.


Object Detection


예제를 파보니 xml파일의 정보를 근거로 구분하는거라서 시간이 오래 걸릴것 같아서 다른 방법을 찾아봤습니다.

이걸 필요로 하시는 분은 도와 드릴 수 없습니다.


한가지!

저 처럼 파일을 어디서 불러오는지 모르는 기초도 없는 속성 프로그래머분들

xml파일 위치를 C드라이브에 넣고 경로를 "c:/파일명"으로 수정하면 실행 됩니다.


String 타입을 사용할 수 없다고 에러 나면 컴퓨터 재부팅하세요.

허접한 제가 도와 드릴 수 있는건 더 이상 없습니다.



Template Matching


제가 필요로 하는것은 이것이였습니다.

A 이미지 에서 B 이미지를 기준으로 그 흔적을 찾는 기술!!


예제를 복붙해서 실행하면


안돼!!


img = imread(argv[1], IMREAD_COLOR):


argv[1]가 뭔데!!


검색하면 다 나오긴 합니다면 저는 그냥 이미지 파일 경로로 수정 했습니다.


그리고 작동에 불 필요하다 싶은 코딩을 전부 지웠습니다.


#include "opencv2/imgcodecs.hpp"

#include "opencv2/highgui.hpp"

#include "opencv2/imgproc.hpp"

#include <iostream>


using namespace std;

using namespace cv;


Mat img; Mat templ; Mat result;

const char* image_window = "Source Image";

const char* result_window = "Result window";


int match_method;

int max_Trackbar = 5;


void MatchingMethod(int, void*);


int main(int argc, char** argv)

{

img = imread("c:/ten_pin_01.jpg", IMREAD_COLOR);

templ = imread("c:/Bowling_Pin_01s.jpg", IMREAD_COLOR);


namedWindow(image_window, WINDOW_AUTOSIZE);

namedWindow(result_window, WINDOW_AUTOSIZE);


MatchingMethod(0, 0);


waitKey(0);

return 0;

}


void MatchingMethod(int, void*)

{

Mat img_display;

int result_cols = img.cols - templ.cols + 1;

int result_rows = img.rows - templ.rows + 1;


result.create(result_rows, result_cols, CV_32FC1);


matchTemplate(img, templ, result, match_method);

normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());

double minVal;

double maxVal;

Point minLoc;

Point maxLoc;

Point matchLoc;


minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());

if (match_method == TM_SQDIFF || match_method == TM_SQDIFF_NORMED)

{

matchLoc = minLoc;

}

else

{

matchLoc = maxLoc;

}

rectangle(img, matchLoc, Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows), Scalar::all(0), 2, 8, 0);

rectangle(result, matchLoc, Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows), Scalar::all(0), 2, 8, 0);


imshow(image_window, img);

imshow(result_window, result);


return;

}


주의 사항

result.create에서 이미지 크기가 마이너스 값이 나오면 에러난다!!


아! 의문이 들긴했는데 겅즘을 미루어서 이걸로 이틀날렸습니다.


이제 실행 해보면 전 성공했습니다.


이제 하나의 이미지에서 같은것을 반복문으로 여러번 찾게 만든 다음에

캠이나 영상에서도 같은걸 찾는 프로그램을 만들면 중요한것은 끝


그리고 자잘한거 마무리하면 ㅠ,.ㅠ


이래저래 한달은 걸릴듯


유사 이미지 반복 찾기 참고중인 자료

http://poorman.tistory.com/199?category=685947


영상에서 차량 카운팅하는것은 유튜브에서 찾으면 나옴돠.

소스도 제공하며 여기 올리는 파일은 3.4버전에서 정상 작동 하도록 수정한 코드입니다. (아마도)


objectTrackingTut_v3.4.cpp


vector 어쩌구인가 using namespace std;가 없으면 작동을 하지 않더군요.








728x90
728x90
AND

ARTICLE CATEGORY

전체 카테고리 (941)
게임 개발 (10)
기획 파트 (23)
그래픽파트 (72)
思-네트워크 (112)
프로그래밍 (74)
2020 ~ 24 잡탕 (393)
2010 ~ 19 잡탕 (197)
만화 연재 (14)
소설 연재 (12)
기타 연재 (0)
네오스 VR (18)
그란 카 리버리 (15)

RECENT ARTICLE

RECENT COMMENT

RECENT TRACKBACK

CALENDAR

«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

ARCHIVE