목록공부/영상처리 (6)
dev-logs
yuv422 (yuyv)yuv 포맷은 Packed 포맷(yuv420, yuv444)과 Planner 포맷(yuv422)으로 나뉜다. Packed 포맷은 y성분, u성분, v성분이 번갈아가면서 섞인채로 존재 한다. (RGB처럼!) Planner 포맷은 각 성분의 영역(Plane) 이 따로 존재한다.그림의 UV Plane에서는 u와 v가 같이 존재하지만, U Plane, V Plane 따로 존재할 수 도 있다. 처음엔 이부분이 헷갈려서 포맷변환 함수를 만드는게 너무 어려웠다.지금도 어렵지만.... 데이터 구조만 잘 파악하고 있다면, 점점 익숙해질 것 같다.다음 함수는 yuv422를 1/2배 한 후, 원하는 영역을 crop하여 gray포맷으로 바꾸는 함수이다. 다음에 또 헤메지 않기 위해 저장!12345678..
좋은 영상을 얻는 것은, 영상처리에서 중요한 것 중 하나라고 생각한다. 그러기 위해서는 내가 사용할 카메라에 대해서 잘 알아야 한다. 여러가지 정보중에 카메라가 영상 프레임을 몇초에 한번씩 주는지(fps)를 확인하는 것이 중요하다. 카메라가 그냥 카메라만 달려있다면 크게 상관하지 않고 카메라가 얻는 fps만 고려하면 된다. 하지만 카메라에 영상처리 기능 외 다른 기능의 알고리즘이 있다면 내 알고리즘을 얼마나 수행시킬 수 있는지 확인해야 한다. 나는 보통 1초에 frame 이 몇번 들어오는지 확인하는데 이걸 확인하는 매우매우 간단한 코드를 저장할 겸 올린다. 1234static int algoFlag = 0, algoCnt = 0; //처음 시간만을 저장하기위한 플래그와 알고리즘 수행횟수 저장변수stati..
이미지파일 불러오는 걸 이전까지 했는데요. 이번에는 불러온 rgb이미지를 gray이미지로 변환하는 걸 구현하겠습니다. 메뉴에 Convert Gray 항목을 추가했구요, 우클릭해서 이벤트를 추가합니다. 잘못캡쳐됐는데, 클래스목록은 CViewerDlg로 놓고 추가해주세요~! 저는 함수이름도 OnConvertgrayBtnClick() 으로 변경했습니다. RGB는 한픽셀당 3비트인데 각각의 비트에는 B, G, R 순서대로 값이 들어갑니다. gray로 바꾸는 부분에 for문 안에서 rgb 값을 정의해줄때 rgb 구조를 잘 생각할것! 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647void CViewerDlg::..
간단한 뷰어 프로그램을 만들어보려 합니다. UI는 c++ MFC를 사용합니다. MFC 를 다루는건 이번이 처음인데 윈폼이 그리워집니다. MFC 응용 프로그램 선택 대화상자 기반 을 선택하고 마침 합니다. 이런 dialog가 만들어집니다. 왼쪽에 리소스 뷰를 보시면 밑줄친폴더 우클릭 후 리소스 추가 Menu를 새로만들기 합니다. 메뉴 창이 따로 만들어지네요. 컨트롤을 입력해주세요! 참고로 이번포스팅은 File Open 까지 구현합니다..ㅎㅎ File Open 버튼에서 우클릭 - 이벤트 처리기 추가 클릭 위와 같이 선택해주세요. 저는 보기편하게 함수처리기 이름을 위처럼 살짝 변경했습니다 :) 추가 및 편집 을 누르면 코드창으로 이동합니다. 이런 함수가 만들어지고 여기에 이벤트를 구현합니다. openfiled..
영상처리에 많이 활용되는 opencv 를 설치해보겠습니다. 앞으로 포스팅을 계속할지 안할지는 잘모르겠지만....ㅎㅎ opencv는 이미지나 영상을 보기위한 (display) 용도로만 사용할 예정입니다. 1. 설치 http://opencv.org/ 사이트에 들어가서 download 메뉴로 들어갑니다. 여러 버전들이 많지만 여기서는 3.0 으로 설치하도록 하겠습니다. OpenCV for Windows 를 클릭해 들어가서 파일을 다운로드 받으면 이런 아이콘의 파일이 생깁니다. 파일을 실행하면 압축할 위치를 정하는데 C드라이브에 푸는걸 권장합니다. 이제 설치는 끝났습니다! 2. 세팅 visual studio를 실행합니다. 참고로 저는 2015버전입니다. c++ 의 win32 콘솔 응용 프로그램으로 새 프로젝트를..
참고로 안드로이드 버전 6.0.1에서 실행했습니다. 1. 촬영한 동영상을 sdcard에 저장하기 위해서 "Manifest.xml" 파일에코드를 넣어주었다. 나는 MediaRecorder를 사용해서 녹화를 했는데, setOutputFile() 함수의 인자로 저장경로를 넣어줘야 했다. 당연히 경로를 "/sdcard" 로 지정하면 잘 저장이 될 줄 알았다... 하지만 몇번의 시도 끝에!! 안드로이드 4.0버전인가... 부터는 저런식으로 지정하는 것을 허용하지 않는다는 걸 알게 되었다. 결론은 외부저장소에 저장하기 위해서는"/mnt/sdcard";로 해야한다. 저기가 외부저장소의 root? 인 것 같다. 안드로이드는 너무 변화가 잦아서 개발하기에는 너무 번거로운 것 같다ㅜ 가뜩이나 어려운데....