2015년 2월 20일 금요일

OpenCV - 기본적인 이미지 처리 함수


Include에 사용된 파일
실행시에 필요한 DLL파일
#include <opencv2/core/core.hpp>
OpenCV\build\x86\vc11\bin\opencv_core248.dll
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/imgproc/imgproc.hpp"
OpenCV\build\x86\vc11\bin\opencv_imgproc248.dll
#include <opencv2/highgui/highgui.hpp>
OpenCV\build\x86\vc11\bin\opencv_highgui248.dll


OpenCV의 namespace

    using namespace cv;

이미지파일을 읽는 방법

    Mat image;
    image = imread(argv[1], IMREAD_COLOR); // Read the file

imread함수는 첫번째 지정된 파일을 두번째 지정된 형식으로 읽어 들인다. 이때 색상은 RGB순서가 아니고 BGR순서로 저장된다.


특정 범위에 있는 색상을 바꾸는 방법

    // Red를 Green으로 바꾸는 예
    Vec3b upper = Vec3b(0, 0, 255); //B, G, R
    Vec3b lower = Vec3b(0, 0, 255);
    Vec3b with = Vec3b(0, 255, 0);
    Mat mask;

    inRange(image, lower, upper, mask);
    image.setTo(with, mask);

inRange함수는 image에 있는 색상 중 lower이상이고 upper이하인 색상에 대한 마스크를 만들어 mask에 저장해서 돌려 준다. 이때 RGB 세개를 한꺼번에 비교하는 것이 아니라 R이 범위에 들어가는지, G가 범위에 들어 가는지, B가 범위에 들어 가는지 각각 따로 비교해서 모두 범위에 들어 가는 것만 mask대상이 된다.


Mat.setTo함수는 이미지에 있는 색상 중에서 mask로 지정된 부분에 있는 색상을 with로 대체한다.

컬러 이미지를 그레이로 바꾸는 방법

    Mat mat_gray;
    cv::cvtColor(image, mat_gray, CV_BGR2GRAY);

cvtColor함수는 첫번째 인수로 지정된 이미지를 세번째 인수형식으로 바꾼 이미지를 두번째 인수로 돌려 준다.

이미지 크기를 바꾸는 방법

    double factor = 3.0;
    Mat mat_sized;
    int width = (int)(mat_gray.size().width * factor);
    int height =  (int)(mat_gray.size().height * factor);
    cv::resize(mat_gray, mat_sized, Size(width, height));
resize함수는 첫번째 인수로 지정된 이미지를 세번째 크기로 바꾼 이미지를 두번째 인수로 돌려 준다.

이미지파일 저장

    cv::imwrite( filename, mat_sized);


댓글 없음 :

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.