출처 - www.opencv.co.kr


1번하고 6번은 비트를 했다면 알아야지 ㅋㅋㅋㅋ....나머지는 새로운 정보네...

좋다~!!!



1. cvCreateImage를 했으면 cdReleaseImage를 해야만 한다.

그래야 메모리 누수를 막을 수 있다.

 

다행인것은 openCV로 만든 프로그램이 죽을때 알아서 메모리를 릴리스 한다.(잘 만들었지요.)

위에서 언급한 것은 본인이 만든 소프트웨어가 돌아갈때 계속해서 create만 하고 relase를 안하면 메모리를 잡아먹기만 하는것이다.

image 하나 불러서 보여주는 루틴의 소프트웨어로도 메모리 2기가 잡아 먹을수 있다!!!

 

2. OpenCV의 컬러 이미지 순서는 B,G,R 이다. 즉 Blue, Green, Red 이다.

보통 우리는 R,G,B로 생각하게 되고

MATLAB의 이미지도 R,G,B 순서이다.

 

3. 이미지는 좌측하단이 (1.1) , 즉 오리진인 경우와

좌측 상단이 (1,1) 인 경우가 있다. MATLAB에서 처리하는 것과 openCV에서 처리하는 것과

보통 우리가 사용하는 Image(jpg, BMP)의 오리진 코디네잇이 다를 수 있다.

결과 이미지가 업사이트 다운 되었다고 말하기 전에 한번 살펴보아라.

 

업사이드 다운의 해결방안은 cvFlip(IplImage, NULL, 0); 를 이용하면 된다.

 

 

4. 이미지의 결과가 90도로 기울어 졌다면

보통 열과 행(너비와 높이)을 거꾸로 계산해서 나오는 경우다.

 

5.  OpenCV의 많은 함수가 single channel 함수이다. 즉 그레이 이미지만 다룰 수 있다.

따라서 컬러이미지의 경우 3개의 그레이 이미지로 나눈다음 원하는 함수를 적용후 다시 합치면

된다. 이것이 아니꼬우면 상용 인텔 이미지 프로세싱 라이브러리를 구입하면 된다. 아니면 직접 만들어서 openCV 커뮤니티에

도움을 주면 된다.

이런 문제를 방지하고자 하면 메뉴얼에서 그 함수가 single channel을 지원하는지 아니면 multi channel을 적용하는지

한번쯤 주의깊에 살펴보면 된다.

보통 나오는 에러메시지가 depth 어쩌구 저쩌구이다.  depth는 채널의 깊이이다.

1이면 그레이 이미지 3이면 컬러이미지 4이면 컬러+알파채널이다.

 

 

6. 어떤 환경에서 프로그래밍을 하면 젤 먼저 해보는 예제가 hello world. 왜 이것을 하는지는 모르겠지만, 아마 어떤 이야기가 있겠지요. 그럼 그 다음에 해야하는데 디버깅툴을 알아보는 것. 내가 결국은 복잡한 프로그래밍을 할 것인데 그때는 디버깅을 어떻게 해야할 것인가? 이것을 반듯이 테스트 해봐야 한다. MS Visual Studio를 사용한다면 디버깅은 훌륭하게 지원하니까 별 문제가 안되는데

리눅스를 사용한다면 약간 머리를 써야 한다. 리바운드를 제압한 자가 시합을 제압한다라는 말, 디버깅을 잘하는 자가 좋은 프로그램을 만든다. 이 부분 반듯이 숙지하시길...

 

openCV경우는 조그만 창을 열어서 중간과정의 결과물을 보는것도 일종의 디버깅이고

메모리 누수를 막는것도 디버깅이고

복잡한 계산 결과를 저장한 변수가 제대로 저장하고 있나는 찾는 것도 디버깅이다.

디버깅에 대한 노하우를 반듯이 찾아서 습득하고 있을것.

디버깅 축에도 안드는 것이 컴파일  및 링킹 에러인데 자신이 만들어서 처음으로 컴파일 했는데

에러 메시지가 많고 영어라서 두렵고 짜증나는 것은 디버깅 축에도 못낀다. 사실 그 영어를 조금만 읽어보고

그 에러메시지를 구글에 때려 넣어서 찾으면 답은 금방 나온다. 디버깅은 컴파일도 잘되고 링킹도 잘되는 프로그램이

원하지 않는 값을 내 놓을때부터 본격적인 시작이다. 내가 변수를 잘 못썼을수도 있고, 논리적으로 잘 못 전개했을수도 있고

프로그램의 설계 자체가 잘못 되었을수도 있고 등등...


Posted by 아몰라

댓글을 달아 주세요