Programming/openCV2015. 10. 5. 11:35

대충 이렇게 쓰면 되려나?

void CallBackFunc_Mouse(int event, int x, int y, int flags, void* userdata)

{

switch(event)

{

case EVENT_MOUSEMOVE:

//x,y

break;

case EVENT_LBUTTONDOWN:

case EVENT_LBUTTONUP:

case EVENT_RBUTTONDOWN:

case EVENT_RBUTTONUP:

case EVENT_MBUTTONDOWN:

case EVENT_MBUTTONUP:

case EVENT_LBUTTONDBLCLK:

case EVENT_RBUTTONDBLCLK:

case EVENT_MBUTTONDBLCLK:


// case EVENT_MOUSEWHEEL:

// case EVENT_MOUSEHWHEEL:

}

}


setMouseCallback("My Window", CallBackFunc_Mouse, NULL); 


2.4.1 에서는 마우스 휠 이벤트가 없다. 3.0.0 부터 지원하는 듯

error: ‘EVENT_MOUSEWHEEL’ was not declared in this scope

error: ‘EVENT_MOUSEHWHEEL’ was not declared in this scope


---



enum   cv::MouseEventFlags

  cv::EVENT_FLAG_LBUTTON = 1, 

  cv::EVENT_FLAG_RBUTTON = 2, 

  cv::EVENT_FLAG_MBUTTON = 4, 

  cv::EVENT_FLAG_CTRLKEY = 8, 

  cv::EVENT_FLAG_SHIFTKEY = 16, 

  cv::EVENT_FLAG_ALTKEY = 32 

}

 

enum   cv::MouseEventTypes

  cv::EVENT_MOUSEMOVE = 0, 

  cv::EVENT_LBUTTONDOWN = 1, 

  cv::EVENT_RBUTTONDOWN = 2, 

  cv::EVENT_MBUTTONDOWN = 3, 

  cv::EVENT_LBUTTONUP = 4, 

  cv::EVENT_RBUTTONUP = 5, 

  cv::EVENT_MBUTTONUP = 6, 

  cv::EVENT_LBUTTONDBLCLK = 7, 

  cv::EVENT_RBUTTONDBLCLK = 8, 

  cv::EVENT_MBUTTONDBLCLK = 9, 

  cv::EVENT_MOUSEWHEEL = 10, 

  cv::EVENT_MOUSEHWHEEL = 11 

}


[링크 : http://docs.opencv.org/master/d7/dfc/group__highgui.html#gsc.tab=0] 


void CallBackFunc(int event, int x, int y, int flags, void* userdata)

{

     if  ( event == EVENT_LBUTTONDOWN )

     {

          cout << "Left button of the mouse is clicked - position (" << x << ", " << y << ")" << endl;

     }

     else if  ( event == EVENT_RBUTTONDOWN )

     {

          cout << "Right button of the mouse is clicked - position (" << x << ", " << y << ")" << endl;

     }

     else if  ( event == EVENT_MBUTTONDOWN )

     {

          cout << "Middle button of the mouse is clicked - position (" << x << ", " << y << ")" << endl;

     }

     else if ( event == EVENT_MOUSEMOVE )

     {

          cout << "Mouse move over the window - position (" << x << ", " << y << ")" << endl;


     }

}


setMouseCallback("My Window", CallBackFunc, NULL);


[링크 : http://opencv-srf.blogspot.kr/2011/11/mouse-events.html] 


void onMouse( int event, int x, int y, int, void* )

[링크 : https://github.com/Itseez/opencv/blob/master/samples/cpp/ffilldemo.cpp]

    [링크 : http://docs.opencv.org/modules/highgui/doc/user_interface.html#setmousecallback] 

 

2015/09/25 - [Programming/openCV] - opencv2 마우스 이벤트 / 클릭 위치


Posted by 구차니
Programming/openCV2015. 10. 3. 22:13

아.. 이런 원리인가!

template matching 방법을 정해주고

나온 이미지를 normalize 해서 0과 1로 출력하게 하고

minMaxLoc으로 매칭되는 부분을 찾고(포인트 단위)

원본 템플릿 이미지의 폭을 이용해서 박스를 그려준다.


+

normalize 된걸 출력해봤는데 

SQDIFF / TM CCORR 은 출력되는게 없고(normalize 되지 않아서 그런 듯)

SQDIFF NORMED / TM CCORR NORMED / TM COEFF / TM COEFF NORMED 만 나온다

+


Mat img;

Mat templ;

Mat result;

int match_method; // 6가지 종류의 매칭 방법(0~5)

double minVal; double maxVal; Point minLoc; Point maxLoc;


img = imread( argv[1], 1 );

templ = imread( argv[2], 1 );

    matchTemplate( img, templ, result, match_method );

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

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


    if( match_method  == CV_TM_SQDIFF || match_method == CV_TM_SQDIFF_NORMED )

        { matchLoc = minLoc; }

    else

        { matchLoc = maxLoc; }


    rectangle( img_display, 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 );


[링크 : http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html]


C++: void matchTemplate(InputArray image, InputArray templ, OutputArray result, int method)

[링크 : http://docs.opencv.org/modules/imgproc/doc/object_detection.html#matchtemplate] 


C++: void normalize(InputArray src, OutputArray dst, double alpha=1, double beta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray() )

C++: void normalize(const SparseMat& src, SparseMat& dst, double alpha, int normType)

[링크 : http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#normalize] 


C++: void minMaxLoc(InputArray src, double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc=0, InputArray mask=noArray())

C++: void minMaxLoc(const SparseMat& a, double* minVal, double* maxVal, int* minIdx=0, int* maxIdx=0 )

[링크 : http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#minmaxloc] 


'Programming > openCV' 카테고리의 다른 글

opencv 마우스 이벤트와 빠르게 그리기  (0) 2015.10.05
opencv 마우스 이벤트 관련 2  (0) 2015.10.05
opencv neon 최적화  (0) 2015.10.01
openCV 템플릿 매칭 예제 실행  (0) 2015.10.01
opencv 버전들  (0) 2015.09.30
Posted by 구차니
Programming/openCV2015. 10. 1. 11:53

엥? 2.1에서 단순하게 neon 활성화 하는데 이렇게 오른다고? ㄷㄷㄷ

OpenCv 2.1

– cvMatchTemplate() algorithm as the test case

cvMatchTemplate( img, tpl, res, CV_TM_CCORR_NORMED );



Flags:

CFLAGS += -pipe -O3

• Result: ~19.35sec @800Mhz


Flags:

CFLAGS += -pipe -O3 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp

• Result: ~4.91sec @800Mhz

~75% increase in performance

[링크 : http://elinux.org/images/1/1c/Optimizing_the_Embedded_Platform_Using_OpenCV.pdf]


[링크 : http://answers.opencv.org/question/33940/are-these-functions-accelerated-by-arm-neon/]

    [링크 : http://answers.opencv.org/question/17845/open-source-neon-optimizations/]


NEON intrinsics 노가다..

[링크 : http://web.stanford.edu/class/cs231m/lectures/lecture-4-opencv.pdf]



+

g++ -lopencv_core -lopencv_video -lopencv_highgui -lopencv_imgproc -mfpu=neon -ftree-vectorize -mfloat-abi=hard MatchTemplate_Demo.cpp -o b.out

./b.out 1.jpg 2.jpg


음.. 차이가 없네...


openCV 3.0 부터 제한적으로 NEON을 옵션으로 제공하는 듯...

[링크 : http://answers.opencv.org/question/35233/neon-support-in-opencv/]

[링크 : http://opencv.org/opencv-3-0.html]

'Programming > openCV' 카테고리의 다른 글

opencv 마우스 이벤트 관련 2  (0) 2015.10.05
opencv 템플릿 매칭 코드 관련  (0) 2015.10.03
openCV 템플릿 매칭 예제 실행  (0) 2015.10.01
opencv 버전들  (0) 2015.09.30
opencv 템플릿 매칭 관련  (0) 2015.09.28
Posted by 구차니
Programming/openCV2015. 10. 1. 09:58

1.jpg 816*612

2.jpg 190x44


x forwarding으로 해서 느린건지.. 일단은 미지수

암튼 실시간으로 추적은 힘들 수준이랄까..

해상도를 더 낮추지 않으면 1초에 1번 검색하기도 벅찰듯..


$ wget https://raw.githubusercontent.com/Itseez/opencv/master/samples/cpp/tutorial_code/Histograms_Matching/MatchTemplate_Demo.cpp

$ g++  -lopencv_imgproc -lopencv_core -lopencv_highgui MatchTemplate_Demo.cpp -o b.out

$ ./b.out 1.jpg 2.jpg


소스중에 이 부분을 주석처리 해주어야 함(사용 안하는 부분인가..)

#include "opencv2/imgcodecs.hpp"


결과물.. 아무튼 6가지 중에 2개 정도는 정상적으로 위치를 잡아 내지 못했다.

시간은 나중에 따로 프로그램 수정해서 측정을 해봐야 할 듯

SQDIFF / TM COEFF NORMED 두가지가 무난해 보이는데..

공식을 보면.. SQDIFF가 가장 CPU를 조금 쓸것으로 예상되긴 한다.




[링크 : http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html]


SQDIFF


SQDIFF NORMED


TM CCORR


TM CCORR NORMED


TM COEFF


TM COEFF NORMED


'Programming > openCV' 카테고리의 다른 글

opencv 템플릿 매칭 코드 관련  (0) 2015.10.03
opencv neon 최적화  (0) 2015.10.01
opencv 버전들  (0) 2015.09.30
opencv 템플릿 매칭 관련  (0) 2015.09.28
openCV 에피폴라 기하 관련 내용  (0) 2015.09.28
Posted by 구차니
Programming/openMP2015. 9. 30. 15:16

openCV 2.4.6 부터 Use openMP 옵션이 추가된 기분?

[링크 : https://iamsrijon.wordpress.com/./how-to-compile-opencv-to-utilize-multiple-core-processor-in-linux/]

[링크 : http://answers.opencv.org/question/20955/enabling-openmp-while-building-opencv-libraries/]


결국은. 또 다시 크로스 컴파일이거나...

빌드의 시간인가!?!??



물론.. opencv2가 아닌 opencv에서도 수작업으로 병렬화는 가능한듯

[링크 : https://huseyincakir.wordpress.com/2009/11/05/using-openmp-with-opencv/]


openCV2 2.4.0 에서도 무언가 테스트는 했는데 코드가 없어서 아쉽네..

[링크 : http://museguy.tistory.com/16]



2.4.6

switched all the remaining parallel loops from TBB-only tbb::parallel_for() to universal cv::parallel_for_() with many possible backends (MS Concurrency, Apple's GDC, OpenMP, Intel TBB etc.)


2.4.3

Added universal parallel_for implementation using various backends: TBB (cross-platform: http://threadingbuildingblocks.org), OpenMP (cross-platform: http://en.wikipedia.org/wiki/OpenMP), Grand Central Dispatch (iOS/MacOSX: http://en.wikipedia.org/wiki/Grand_Central_Dispatch), Concurrency (Visual Studio 2010 or later: http://msdn.microsoft.com/en-us/library/dd492418.aspx), C= (http://www.hoopoesnest.com/cstripes/cstripes-details.htm). Many exiting parallel OpenCV algorithms have been converted to the new primitive. Therefore, you can enjoy performance improvements even without having to install TBB and ship it with OpenCV-based applications.


[링크 : http://code.opencv.org/projects/opencv/wiki/ChangeLog]

'Programming > openMP' 카테고리의 다른 글

openmp 관련 정리글(win32)  (0) 2015.10.08
openmp 테스트 on rpi  (0) 2015.10.06
openMP affinity 관련..  (0) 2015.07.23
openMP parallel for private  (4) 2013.12.12
openMP private copyin copyprivate firstprivate lastprivate  (0) 2013.11.28
Posted by 구차니
Programming/C Win32 MFC2015. 9. 30. 15:00

그냥 콘솔창에서도 사용이 가능해 보이니 돌려볼까..


[링크 : http://linuxpoison.blogspot.kr/2010/06/cppcheck-tool-for-static-c-c-code.html]

[링크 : http://cppcheck.sourceforge.net/]

[링크 : http://cppcheck.sourceforge.net/demo/]


우분투에서는 cppcheck 라는 이름으로 있군..

[링크 : http://packages.ubuntu.com/precise/devel/cppcheck]


$ sudo apt-get install cppcheck

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following extra packages will be installed:

  libtinyxml2.6.2

The following NEW packages will be installed:

  cppcheck libtinyxml2.6.2

0 upgraded, 2 newly installed, 0 to remove and 81 not upgraded.

Need to get 604 kB of archives.

After this operation, 1,466 kB of additional disk space will be used.

Do you want to continue [Y/n]?

Get:1 http://archive.ubuntu.com/ubuntu/ precise/universe libtinyxml2.6.2 amd64 2                                      .6.2-1build1 [35.3 kB]

Get:2 http://archive.ubuntu.com/ubuntu/ precise/universe cppcheck amd64 1.52-1 [                                      569 kB]

Fetched 604 kB in 2s (225 kB/s)

Selecting previously unselected package libtinyxml2.6.2.

(Reading database ... 213921 files and directories currently installed.)

Unpacking libtinyxml2.6.2 (from .../libtinyxml2.6.2_2.6.2-1build1_amd64.deb) ...

Selecting previously unselected package cppcheck.

Unpacking cppcheck (from .../cppcheck_1.52-1_amd64.deb) ...

Processing triggers for man-db ...

Setting up libtinyxml2.6.2 (2.6.2-1build1) ...

Setting up cppcheck (1.52-1) ...

Processing triggers for libc-bin ...

ldconfig deferred processing now taking place 


Example usage:

  # Recursively check the current folder. Print the progress on the screen and

    write errors to a file:

    cppcheck . 2> err.txt

  # Recursively check ../myproject/ and don't print progress:

    cppcheck --quiet ../myproject/

  # Check only files one.cpp and two.cpp and give all information there is:

    cppcheck -v -s one.cpp two.cpp

  # Check f.cpp and search include files from inc1/ and inc2/:

    cppcheck -I inc1/ -I inc2/ f.cpp


For more information:

    http://cppcheck.sf.net/manual.pdf


-s를 써보라고 예제가 써있어서 해봤더니 style 체크.. 하지만 deprecated라 경고가 뜬다.

    -s, --style          Deprecated, please use '--enable=style' instead

    -v, --verbose        Output more detailed error information.
    -j <jobs>            Start [jobs] threads to do the checking simultaneously.

의외로 경고 뿜뿜을 안해서 실망.. 복잡한 코드를 돌려봐야 하려나?

암튼. make 처럼 -j 옵션을 지원한다.

'Programming > C Win32 MFC' 카테고리의 다른 글

"\n" 의 cpu 점유율?  (0) 2015.10.12
rand()와 RAND_MAX  (0) 2015.10.05
void형 포인터 ++  (0) 2015.07.14
가변인자를 다시 넘겨주기  (2) 2015.07.07
printf 가변인자의 비밀?  (0) 2015.06.18
Posted by 구차니
Programming/openCV2015. 9. 30. 13:42

3.0.0... 세상은 날 기다려 주지 않는구만 -_-


[링크 : http://opencv.org/downloads.html]


라즈베리 파이에서 사용중인 2.4.1은.. 2012년 6월 버전인가? ㄷㄷㄷ

[링크 : https://github.com/Itseez/opencv/tree/2.4.1]



June, 2015

These are changes since 3.0 rc1.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Over 200 bugs reported at http://code.opencv.org/projects/opencv/issues have been resolved/closed. It includes many fixes in docs, build scripts, python wrappers, core, imgproc, photo, features2d, objdetect, contrib modules, as well as some performance improvements etc.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Added pthreads-based backend for cv::parallel_for_. It means that all the parallel processing should be available out-of-the-box on any POSIX-compatible OS, including QNX and such. You are welcome to try it out.


Improved compatibility with OpenCV 2.4:

2.4.11 now includes “opencv2/core.hpp” and other such headers in addition to standard “opencv2/core/core.hpp”.

smart pointers (Ptr<>) can now be created in both 2.4 and 3.0 style (new ClassName(params) vs makePtr(params))

trained and stored stat models from opencv_ml 2.4 can now be loaded and used by opencv_ml 3.0 as-is.

the 2.4=>3.0 transition guide has been sketched: http://docs.opencv.org/master/db/dfa/tutorial_transition_guide.html


[링크 : https://github.com/Itseez/opencv/wiki/ChangeLog]


2.4 -> 3.0 가이드

[링크 : http://docs.opencv.org/master/db/dfa/tutorial_transition_guide.html]

'Programming > openCV' 카테고리의 다른 글

opencv neon 최적화  (0) 2015.10.01
openCV 템플릿 매칭 예제 실행  (0) 2015.10.01
opencv 템플릿 매칭 관련  (0) 2015.09.28
openCV 에피폴라 기하 관련 내용  (0) 2015.09.28
opencv highgui trackbar  (0) 2015.09.27
Posted by 구차니
Programming/openCV2015. 9. 28. 23:43

약어정리


SIFT(Scale Invariant Feature Transform)

HOG(Histogram of Oriented Gradient)

Haar

Ferns

LBP(Local Binary Pattern)

MCT(Modified Census Transform)


[링크 : http://darkpgmr.tistory.com/116]


camshift

meanshift

[링크 : http://darkpgmr.tistory.com/111]

opencv

[링크 : http://t9t9.com/37] matchtemplate()


opencv 2

[링크 : http://docs.opencv.org/modules/imgproc/doc/object_detection.html]  matchTemplate

[링크 : http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html] <<

[링크 : http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-copyto]

    [링크 : http://webnautes.tistory.com/584] Mat 클래스 / copyto() clone() 메소드

[링크 : http://thinkpiece.tistory.com/246] SIFT 기반

[링크 : http://thinkpiece.tistory.com/244] haar 기반



$ sudo find / -name haarcascade*

/usr/share/opencv/haarcascades

/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml

/usr/share/opencv/haarcascades/haarcascade_mcs_leftear.xml

/usr/share/opencv/haarcascades/haarcascade_fullbody.xml

/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml

/usr/share/opencv/haarcascades/haarcascade_righteye_2splits.xml

/usr/share/opencv/haarcascades/haarcascade_mcs_eyepair_big.xml

/usr/share/opencv/haarcascades/haarcascade_mcs_mouth.xml

/usr/share/opencv/haarcascades/haarcascade_lefteye_2splits.xml

/usr/share/opencv/haarcascades/haarcascade_mcs_lefteye.xml

/usr/share/opencv/haarcascades/haarcascade_profileface.xml

/usr/share/opencv/haarcascades/haarcascade_mcs_nose.xml

/usr/share/opencv/haarcascades/haarcascade_eye_tree_eyeglasses.xml

/usr/share/opencv/haarcascades/haarcascade_mcs_righteye.xml

/usr/share/opencv/haarcascades/haarcascade_mcs_upperbody.xml

/usr/share/opencv/haarcascades/haarcascade_mcs_rightear.xml

/usr/share/opencv/haarcascades/haarcascade_eye.xml

/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml

/usr/share/opencv/haarcascades/haarcascade_upperbody.xml

/usr/share/opencv/haarcascades/haarcascade_mcs_eyepair_small.xml

/usr/share/opencv/haarcascades/haarcascade_frontalface_alt_tree.xml

/usr/share/opencv/haarcascades/haarcascade_lowerbody.xml



'Programming > openCV' 카테고리의 다른 글

openCV 템플릿 매칭 예제 실행  (0) 2015.10.01
opencv 버전들  (0) 2015.09.30
openCV 에피폴라 기하 관련 내용  (0) 2015.09.28
opencv highgui trackbar  (0) 2015.09.27
opencv2 마우스 이벤트 / 클릭 위치  (0) 2015.09.25
Posted by 구차니
Programming/openCV2015. 9. 28. 22:44

동영상에서 실시간으로 연산이 되려나 모르겠네...

그것도 라즈베리로.. 흐음...


SIFT랑 무슨 차이인지 좀 찾아 봐야 할 듯..


[링크 : http://docs.opencv.org/master/da/de9/tutorial_py_epipolar_geometry.html]

'Programming > openCV' 카테고리의 다른 글

opencv 버전들  (0) 2015.09.30
opencv 템플릿 매칭 관련  (0) 2015.09.28
opencv highgui trackbar  (0) 2015.09.27
opencv2 마우스 이벤트 / 클릭 위치  (0) 2015.09.25
opencv2.. VideoCapture 클래스..  (0) 2015.09.25
Posted by 구차니
Programming/openCV2015. 9. 27. 21:00

슬라이더라고 해야하려나?

그거 추가하는 내용


그나저나.. 2.4.11.0 문서인데 왜 cpp가 아니라 c로 된게 있지 -ㅁ-?


[링크 : http://docs.opencv.org/modules/highgui/doc/user_interface.html]

[링크 : http://docs.opencv.org/doc/tutorials/highgui/trackbar/trackbar.html]

'Programming > openCV' 카테고리의 다른 글

opencv 템플릿 매칭 관련  (0) 2015.09.28
openCV 에피폴라 기하 관련 내용  (0) 2015.09.28
opencv2 마우스 이벤트 / 클릭 위치  (0) 2015.09.25
opencv2.. VideoCapture 클래스..  (0) 2015.09.25
openCV Mat Class  (0) 2014.07.04
Posted by 구차니