OJT가 끝난 후.. 실무에 투입되고 나서..
진짜 하나도 모르겠다는 감정을 느낀게 굉장히 오랜만이어서 너무 힘들었다. ㅋㅋ쿠ㅜ
화질 튜닝 이론 부족 + 문서 스터디 부족
이 두개 때문에 진짜 완전 갈피도 못잡고 있는 중이다.
아무튼 허덕이고 있는데 파트장님이 번외 업무를 주셔서 재밌게 진행했다.
덕분에 사내에서 쓰이는 검증 프로그램의 버전업을 진행하게 되었다.
기존에 visual studio 2010, opencv1을 사용중이었는데,
이걸 visual studio 2015, opencv4로 버전을 변경하는 작업을 진행했다.
가장 큰 변화는 IplImage 를 모두 Mat 으로 변환하는 작업이었다.
큰 변화점이 몇개 아래 적어보겠다.
IplImage는 스스로가 roi를 가지고 있는데, Mat에서는 그런 기능을 제공하지 않았기 때문에 객체 내에서 원본 이미지와 roi를 모두 가지고 있게 구조를 변경하였다.
coi(Channel of Interest)는 주어진 이미지에서 관심 채널을 가리키는 정수값을 나타냈었는데, Mat으로 오면서는 이러한 것을 표기해줄 필요가 없어졌다.
원래 IplImage에서는 origin을 이용하여 이미지의 원점 위치를 저장해두었었다. 0인 경우 좌상단, 1인 경우 좌하단이 시작 위치로 지정하는 거였는데, 이런것도 필요없어졌다.
원래 IplImage에서는 할당 후 해제를 스스로 해줬어야했다. cvCreateImage 를 통해 메모리를 할당하고, cvReleaseImage 를 통해 메모리 해제를 직접해줘야했다.
Mat에 오면서부터는 세상이 너무 편해져서 create 함수로 메모리 할당 후, 객체가 범위를 벗어나면 자동으로 해제된다. 만약 직접 해제를 원한다면 release를 사용할 수 있다.
bpp를 계산하는 부분이 있어서 이 부분에서 오류가 발생했었다.
IplImage에서 depth는 이미지의 한 픽셀 당 비트 수, nChannels는 채널의 수를 나타내기 때문에 이를 이용하여 bpp를 계산했었던 걸, Mat에도 depth 함수가 있길래 이걸 그대로 사용했었는데 여기서 오류가 터져버렸다;;
오류가 터져버린 이유는 둘의 매크로 값이 다르기 때문이다..

이를 신경써서 bpp를 다시 계산해주면 된다.
참고로 Mat은 type을 통해서 channel까지 함께 확인할 수 있다. !
→ 이것들 모두 Mat 클래스는 다차원 배열을 효율적으로 관리하게 되었기 때문에 쓸데 없는 기능들이 사라진 것이라고 보면된다. 누군가 opencv api 버전 업을 한다면, 사용하지 않는 것들을 중점으로 덜어내게 코드를 변경해야할 것이다.
api 변경은 여기서 끝이 났다.
이어서 환경설정하면서 3일을 개고생한 이야기를 (하)편으로 가져와보도록 하겠습니다 ! ㅎㅎ