본문 바로가기

프로그래밍/OpenCV

[OPENCV] 여러개 이미지 합성 + 합치기 C++ 예제

OPENCV 여러개 이미기 합성하고 합치기

OpenCV (Open Source Computer Vision)은 컴퓨터비전 개발을 위한 오픈소스 라이브러리이다. 초기에는 인텔이 개발하였기 때문에, CPU에서 가속되는 IPP(Intel Performance Primitives)를 지원한다. 현재 OpenCV 는 윈도우, 리눅스 등에서 사용 가능한 크로스 플랫폼이며 오픈소스 BSD 허가서 하에서 무료로 사용할 수 있다. OpenCV는 TensorFlow, Torch / PyTorch 및 Caffe의 딥러닝 프레임워크를 지원한다. (위키백과, 우리 모두의 백과사전)

여러개 이미지 합성해서 출력하는 C++ 예제

두개의 카메라로 캡처한 이미지를 합성해서, 총 4개의 이미지를 생성한다. OpenCV API 인 hconcat 과 vconcat 을 사용하여 하나의 이미지로 합치고 imshow 로 출력한다.

테스트환경

테스트를 위한 Host PC 에는 Ubuntu 18.04  와 OpenCV 3.2.0 가 설치되어 있다.

$ pkg-config --modversion opencv 
3.2.0

OpenCV CMake 작성

다음과 같이 CMakeLists.txt 를 작성한다.

cmake_minimum_required(VERSION 3.0)

project(multi-image-concat)

find_package(OpenCV REQUIRED)

set(
    CMAKE_RUNTIME_OUTPUT_DIRECTORY
    ${CMAKE_HOME_DIRECTORY}
)

add_executable(
    multi-image-concat
    src/main.cpp
)

target_include_directories(
    multi-image-concat
 PRIVATE 
    ${OpenCV_INCLUDE_DIRS}
)

target_link_libraries(
    multi-image-concat
    ${OpenCV_LIBRARIES}
)

message ("OpenCV_LIBRARIES = " ${OpenCV_LIBRARIES})
message ("OpenCV_INCLUDE_DIRS = " ${OpenCV_INCLUDE_DIRS})

OpenCV 예제 코드 작성

다음과 같이 코드를 작성한다.

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    cout << "opencv version : " << CV_VERSION << endl;
    
    // read 2 images
    Mat imgl, imgr;
    imgl = imread("./img/capture0.jpg");
    imgr = imread("./img/capture1.jpg");

    // resize 2 images to small (540x270)
    Mat img1, img2;
    resize(imgl, img1, Size(540,270));
    resize(imgr, img2, Size(540,270));

    // create new 2 image more
    Mat img3, img4;
    img3 = img1 + img2;
    img4 = 0.5*img1 + 0.5*img2;

    if(!imgl.empty() || !imgr.empty())
    {
        Mat main;
        Mat h1, h2;

        hconcat(img1, img2, h1);
        hconcat(img3, img4, h2);
        vconcat(h1, h2, main);
        imshow("main", main);
        waitKey(0);
    }
    else
    {
    	cout << "image not found " << CV_VERSION << endl;
    }

    return 0;
}

위 코드의 간단한 설명은 다음과 같다.

  1. imread 를 통해 이미지 파일 2장을 읽어온다.
  2. resize 를 통해 이미지 파일의 크기를 축소한다.
  3. 축소된 이미지로 2장의 합성 이미지를 생성한다.
  4. hconcat 과 vconcat 을 사용하여 하나의 이미지로 합치고 imshow 로 출력한다.

참고자료

전체 코드는 makepluscode github 를 참고한다.

https://github.com/makepluscode/opencv-examples/tree/master/002-multi-image-concat

 

GitHub - makepluscode/opencv-examples

Contribute to makepluscode/opencv-examples development by creating an account on GitHub.

github.com