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
| 1 2 3 4 5 6 |