OPENCV를 가지고 가장 먼저 이미지 플립을 해보겠습니다.


flip은 뒤집다 라는 뜻을 가지고 있는데요~ 말 그대로 opencv를 통해서 불러온 이미지를 뒤집는 것 입니다.


flip 기능은 이미 저장이 되어있는 기능이기에 별다른 어려움 없이 사용이 가능합니다.


flip ( 원본이미지   ,    실행된flip이저장될이미지,         각종flip   ) 의 구조를 가지고 있습니다.


먼저 원본이미지 자리와 실행된flip이저장될이미지 자리에는 이미지 저장 변수가 있어야 합니다.


그리고 각종 filp에는 3가지 값이 들어갈수 있습니다.


(    positive for horizontal    ;    0 for vertical    ;    negative for both    ) 


일반적으로 positive에는 1, 0 , negative에는 -1을 사용합니다.


positive(1) 은 수평으로 이미지를 뒤집고, 0은 수직으로 이미지를 뒤집으며, negative(-1)은 이미지의 수직수평 모두를 뒤집습니다.(원점대칭)


따라서 소스를 가지고 직접 구동해 보겠습니다.



 다음과 같은 원본 이미지가 있습니다.







#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

     
void main(){

      cv::Mat image;
 
      image = cv::imread("sky.jpg");
 
      cv::namedWindow("Original Image");
      cv::imshow("Original Image", image);
 
      cv::Mat result1;
      cv::flip(image, result1, 1);
 
      cv::namedWindow("Output Image");
      cv::imshow("Output Image", result1);
      cv::waitKey(0);
 
      cv::imwrite("output.jpg", result1);
}

 











 

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

     
void main(){

      cv::Mat image;
 
      image = cv::imread("sky.jpg");
 
      cv::namedWindow("Original Image");
      cv::imshow("Original Image", image);
 
      cv::Mat result1;
      cv::flip(image, result1, 0);
 
      cv::namedWindow("Output Image");
      cv::imshow("Output Image", result1);
      cv::waitKey(0);
 
      cv::imwrite("output.jpg", result1);
}

 











 

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

     
void main(){

      cv::Mat image;
 
      image = cv::imread("sky.jpg");
 
      cv::namedWindow("Original Image");
      cv::imshow("Original Image", image);
 
      cv::Mat result1;
      cv::flip(image, result1, -1);
 
      cv::namedWindow("Output Image");
      cv::imshow("Output Image", result1);
      cv::waitKey(0);
 
      cv::imwrite("output.jpg", result1);
}

 




다음과 같이 flip을 통해서 쉽게 이미지를 뒤집는 방법에 대하여 알아보았습니다.


위의 소스를 살짝 확인해 보자면


image라는 저장 변수를 선언하고 거기에 sky.jpg라는 이미지를 저장하였습니다. 그 다음 result1이라는 이미지변수 선언 후


flip을 통해서 result1이라는 변수에 image변수에 실행한 flip결과 이미지를 저장하였습니다.


마지막에 imwrite를 사용하여 이미지를 저장하게 되며 파일 디렉토리에 이미지파일이 생기게 됩니다.













이번에는 이미지를 복사하는 방법에 대해서 보겠습니다.


먼저 프로그래밍을 할때 대입연산자 ( = ) 를 사용해서 넣는 경우는 어떻게 되는지 보겠습니다.


cv::Mat image;
 
image = cv::imread("sky.jpg");
 
cv::Mat result1;

result1=image;


다음과 같이 대입연산자를 사용한다면 image 변수에 저장된 sky.jpg에 할당된 이미지의 모든 내용이 똑같이 복사됩니다. 가로세로 픽셀수, 그리고 RGB인지 B인지 까지 모두 복사됩니다.


따라서 result1 과 image가 동일하게 되므로 two images refer to the same data 라고 할 수 있습니다.



다른방법으로는


copyTo가 있습니다.


copyTo는 기존이미지변수.copyTo(복사해서넣을이미지변수) 로 사용합니다.


cv::Mat image;
 
image = cv::imread("sky.jpg");
 
cv::Mat result1;

image.copyTo(result1);


이 copyTo 역시 result1 과 image가 동일해지므로 two images refer to the same data 입니다



by 아발로온v 2014.04.07 01:49

설치가 모두 완료 되었고, 경로 설정도 모두 다 되었으면, 정확히 되었는지 확인을 위해 이미지 파일을


불러와서 실행시켜 보도록 하겠습니다.



#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>


void main(){

cv::Mat image;         // 이미지를 저장할 수 있는 변수를 선언합니다.


image = cv::imread("1.jpg");   // 파일디렉토리에 있는 1.jpg 라는 이미지를 변수 image에 저장합니다.


cv::namedWindow("Busan");   // 윈도우창을 정의합니다.


cv::imshow("Busan", image);     // 윈도우창의 이미지를 보여줍니다.(show)


cv::waitKey(0);     // 윈도우창을 띄우는 시간을 지정. 0은 계속해서 창이 떠있도록 합니다. ( 100, 1000 등과 같은 값을 입력하면 창이 지정한 시간 후에 사라짐)

}


다음 소스를 보면 사진 1.jpg를 어디에 놔둬야 할지 궁금할 것입니다. 파일 디렉토리가 어디인지 잘 모르실겁니다.


파일 디렉토리는 비주얼스튜디오에서 만든 프로젝트 폴더를 찾아 들어가면 또 프로젝트 파일 이름과 똑같은 폴더가 존재합니다.

 

이곳이 "파일 디렉토리" 입니다. 이곳에 저장을 하면 됩니다.








소스를 만든 .cpp 파일에다가 작성하고 컴파일 하면 같은 결과가 출력 됩니다.





이렇게 정상적으로 되었다면, 설치가 제대로 되었다는 것을 확인 할 수 있습니다.

by 아발로온v 2014.03.29 03:01

설치(1)에서는 맨처음 딱 1번만 하면 되는 설정을 하였습니다.



이제부터 opencv를 사용하여 영상처리를 할 때 마다 (프로젝트 하나를 할 때마다) 해주어야 하는 일입니다.




1. Visul studio를 실행하고, 빈 프로젝트 하나를 만들어줍니다. 그리고 속성관리자 라는 창을 찾은 후에 DEBUG | WIN32 를 찾은 후에 마우스 오른쪽을 클릭해서


    새 프로젝트 속성 시트 추가를 눌러줍니다.







2. 속성시트를 한번 클릭하면 이름이 .props 로 되어있을 것 입니다. 이것을 DEBURG_BUILD 로 바꾸어서 추가를 눌러줍니다.





3. 방금 추가해준 DEBURG_BUILD에서 마우스 오른쪽 버튼을 누르고 속성을 눌러줍니다.





4. 속성페이지가 뜨게 되면, 먼저 C/C++에서 일반탭을 누른후에 추가 포함 디렉터리에서 편집을 눌러줍니다.





5. 위에 있는 폴더 모양 버튼을 누르고, opencv 폴더에서 build 폴더에서 include 폴더를 추가해 줍니다.





6. 그다음은, 링커에서 일반탭을 누른후에 증분 링크 사용 을 '아니요' 로 변경을 해 주시고, 추가 라이브 디렉터리를 눌러서 편집을 누른 후에,


   opencv폴더에서 build폴더에서 x86폴더에서 vc10폴더에서 lib폴더 의 경로를 추가해 줍니다. ( win8 - 64bit 기준 )





7. 마지막으로 링커에서 입력 탭을 누른 후에 추가 종속성에서 다음 내용들을 복사해서 붙여넣기 한 후에, 확인을 누르시면 됩니다.


opencv_calib3d248d.lib

opencv_contrib248d.lib

opencv_core248d.lib

opencv_features2d248d.lib

opencv_flann248d.lib

opencv_gpu248d.lib

opencv_highgui248d.lib

opencv_imgproc248d.lib

opencv_legacy248d.lib

opencv_ml248d.lib

opencv_objdetect248d.lib

opencv_ts248d.lib

opencv_video248d.lib





8. 이제 마지막으로 소스파일 -> 추가 -> 새항목을 클릭한 후에 .cpp파일을 만들면 이로써 준비는 모두 끝입니다.



by 아발로온v 2014.03.29 02:39
| 1 2 3 4 5 6 |