글

라벨이 Opencv인 게시물 표시

OpenCV + Qt Framework 장점

이미지
아래의 링크를 참조해 보시면 이와 같은 글이 있습니다. http://docs.opencv.org/master/d3/d52/tutorial_windows_install.html OpenCV offers a somewhat fancier and more useful graphical user interface, than the default one by using the Qt framework . For a quick overview of what this has to offer look into the documentations highgui module, under the Qt New Functions section. Version 4.6 or later of the framework is required. 읽어 보시면 알겠지만, Qt framework를 사용하면 더 사용하기 편한 그래픽 유저 인터페이스를 제공한다고 합니다. 자세한 사랑은 highgui 모듈의 Qt New Functions 섹션을 참조하라고 하네요. 그래서 읽어 봤습니다. http://docs.opencv.org/master/dc/d46/group__highgui__qt.html 읽어 보고 싶으신 분은 위의 링크에서 읽어 보세요. 간단한 설명 CV_GUI_EXPANDED flag를 사용하면 추가적인 저장, 확대와 같은 기능이 이용가능합니다.  마우스 휠 이벤트를 통해 사진 확대 및 축소가 가능하고 RGB 값을확인할 수 있습니다. CV_GUI_NORMAL flag로 일반적으로 사용하던 윈도우를 사용하 실 수 있습니다. 윈도우에 꼭 추가해야 했던 trackbar를 control panel에 추가 할 수 있습니다. 버튼도 가능합니다. CV_GUI_EXPANDED flag에서 마우스 이벤트에 따라 마우스 좌표 및 RGB값을 statusbar에서 확인 할 수 있군요. 이 외의 추가기능이 좀 더 있지만 더 자세한 사항은 위의 링크에서 확인해 주시...

OpenCV + Qt framework 설치 in Windows

이미지
1. OpenCV 설치 or Qt 설치 단순하게 OpenCV 설치 혹은 QT 설치를 원한다면 http://docs.opencv.org/2.4/doc/tutorials/introduction/table_of_content_introduction/table_of_content_introduction.html#table-of-content-introduction     http://www.qt.io/ 위의 두 링크를 참조하기 바랍니다. 하지만, opencv에서 qt framework를 사용하여 추가적인 이점을 꾀하신다면 아래의 과정을 밟아주세요. 아래에서 보는 바와 같이 Qt framework를 사용하면 이점이 있다고 합니다. 이점에 관련된 내용은 highgui에서 찾아 보시고 저는 설치방법에 대해서만 설명하겠습니다. OpenCV offers a somewhat fancier and more useful graphical user interface, than the default one by using the Qt framework . For a quick overview of what this has to offer look into the documentations highgui module, under the Qt New Functions section. Version 4.6 or later of the framework is required. 2. OpenCV + Qt  framework 설치 opencv 혹은 qt를 따로 설치하는 것이 아닌 opencv에서 qt framework를 사용하고 싶다면 아래의 순차대로 설치하면 됩니다. (Linux에서는 참 쉬운데 ㅜ_ㅠ windows에서는 꽤나 고생했습니다.) 2.1 CMake 설치 https://cmake.org/ 위의 링크에서 설치하자. 자세한 내용은 생략한다. * 필요에 따라 path 설정을 해주시기 바랍니다. 2.2 Min...

[OPENCV] pose estimation using solvePnP

이미지
solvePnP opencv함수로 chessboard의 좌표계를 구성하여 chessboard 좌표계까지의 변환 행렬을 얻을 수 있다. 물론, 카메라 calibration 및 그 외의 전과정은 미리 다 해둔 것으로 가정. * 정확하게는 chessboard와 카메라 사이의 translation vector와 rotation vector가 반환된다. homography matrix를 얻고싶다면 위의 값을 잘 이용해보자. 아래의 동영상을 보면 쉽게 이해 될 것이다. 이와 같은 pose estimation은 써먹을 곳이 많다. 예로들면, 움직이는 물체를 추적하고 이동거리를 알고 싶을 때 pixel단위가 아닌 mm단위로 이동거리를 알아낼 수 있다. 이와 마찬가지로 지면과 카메라 간의 변환 행렬을 구하여 실제 거리를 재는등의 목적으로 사용할 수 있을 것 같다.   장점 1. 오차가 상당히 없는 듯하다. 2. 데이터를 실험적으로 뽑아 낸 것은 아니지만 나의 감각에 의하면 오차가 커봐야 1cm터 내외 일 듯 하다. *위의 영상에서는 chessboard 좌표계의 원점에서 부터 x,y,z 축으로 5cm의 선을 그리도록 하였다. 단점 1. findChessboard 과정에서 corner를 못 찾게 되면 상당한 시간이 지연된다. 2. 최소 3x3 chessboard가 필요하다. 핵심 코드 struct CamParameter { cv :: Mat cameraMatrix; cv :: Mat distCoeffs; }; void solvePnP (Mat & img, CamParameter camParam) { vector < Point3f > objectPoint; vector < Point2f > imagePoint = findChessboard(img); if (imagePoint.size() != CHESS_COLS ...

Stereo Camera 구성

이미지
web cam 2대를 이용해서 stereo camera를 만들어 보았다. 실시간으로 depth 값을 얻어오려 했으나 실패하였으나 Depth 값을 얻어 오는 것 까지는 성공하였다. 처음에는 다른 기종의 web cam로 시도했으나 화각에 차이에 따른 문제가 때문인지 rectification 과정이 제대로 되지 않아 실패하였다. 결국 같은 기종의 web cam [개당 만원]을 구입해 값을 출력해보니 상당히 괜찮은 결과물이 나왔다. 심지어 같은 기종의 web cam을 이용하니 스테레오 보정을 하지 않아도 어느 정도 결과물이 나온다. [그래 봤자 아래의 결과물이다. 쓸만한 건 아니다.] 아래의 동영상은 OpenCV의 steroBM 과 stereoSGBM을 이용한 영상이다. [BM] [SGBM] 위의 영상들은 software로 Rectification 을 전혀 하지 않고 찍은 영상이다. 추후 더 좋은 카메라를 구하게 되면 다시 영상을 업로드 하겠다. 추후 결과 해보니 보정을 하지 않는 편이 결과물이 더 좋더군요. 아무래도 너무 저가의 카메라를 이용하여서 그런듯 합니다. 언젠가 더 좋은 카메라를 쓸 수 있기를 ㅠ_ㅠ

Stereo Rectification

이미지
Stereo Rectification 우선, stereo camera를 만들기 위해서는 당연히 2대의 카메라가 필요한데 같은 카메라 2대를 쓰는 것이 당연히 좋다. stereo camera를 구성하는 순서는 1. camera calibration 2. stereo calibration 3. stereo rectification 이와 같은 3가지 과정이 필요하다. 자세한 내용은 건너뛰고, 여기서 언급하려고 하는 과정은 3. stereo rectification이다. 두 장의 다른 이미지의 행을 맞추는 작업이다. 이 과정은 camera calibration, stereo calibration 두 과정이 선행되어 있어야 한다. 즉, 정확한 스테레오를 구현 하기 위해서는 카메라 내부행렬 및 두 카메라 사이의 관계를 알고 있어야 한다. 위의 사진은 OpenCV의 예제 파일이다. 좌측 상단의 사진은 좌측 카메라의 사진이고, 우측 상단의 사진은 우측 카메라의 사진이다. 사진을 자세히 보면 두 사진의 열이 같은 모습을 볼 수 있다. 또한, 좌측 하단의 사진은 우측 상단의 사진과 같은 사진인데 좌측 사진과 우측 사진이 다른 사진임을 보이기 위해 수직으로 선을 그었다. 수직으로 그어진 선을 보면 두 사진 간에 시차가 발생하는 것을 알 수 있다. 잘 정렬된 사진을 이용하여 Depth Map을 그린 사진이다. 위의 결과는 상당히 Rectify가 잘 된 경우이고, 일반적인 경우는 이 보다 못한 결과 값이 나온다. 나는 만원짜리 카메라를 사용하여 그런지 매우 좋지 못한 결과 값이 나왔다. 하지만, 위의 사진을 보면 알고리즘은 문제 없음을 알 수 있다.