본문 바로가기
프로그래밍/OpenCV

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

by makepluscode 2022. 6. 9.
반응형

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

반응형