OpenCV 활용 이미지 합치기

Jayce_97·2023년 6월 18일
0

Python OpenCV

목록 보기
2/2
post-thumbnail

이번 시간에는 이전 시간에 자른 이미지를 다시 하나로 합치는 방법을 배워보도록 하겠습니다.


이미지 합치기

input

import sys
import cv2

def merge_image(tiles, m, n):
    # 결과 이미지를 저장할 변수 초기화
    result = []

    for i in range(n):
        row_tiles = tiles[i * m:(i + 1) * m]

        # 타일 이미지 가로로 합치기
        row_image = cv2.hconcat(row_tiles)
        result.append(row_image)

    # 결과 이미지 세로로 합치기
    output = cv2.vconcat(result)

    return output

merge_image라는 이미지를 합치는 함수를 만들기 위해 result라는 빈 배열을 만들어 줍니다.
row는 가로(열)이며 hconcat함수를 이용하여 가로로 합쳐진 데이터를 생성하고, append를 이용하여 빈 배열 result에 데이터를 밀어 넣어줍니다.
vconcat을 이용하여 완성된 가로 데이터들을 합쳐준 후 값을 반환해 줍니다.


명령어 확인

input

def main():
    # 명령줄 인수 오류확인
    if len(sys.argv) != 5:
        print("잘못된 입력입니다. 입력파일이름, 행, 열, 출력파일이름을 이용해 주세요")
        return

    prefix_input_filename = sys.argv[1]
    m = int(sys.argv[2])
    n = int(sys.argv[3])
    output_filename = sys.argv[4]

    # 타일 이미지 로드
    tiles = []
    for i in range(m * n):
        tile_file_name = f"{prefix_input_filename}_{i}.jpg"
        tile_image = cv2.imread(tile_file_name)

        if tile_image is None:
            print(f"파일을 읽는데 실패했습니다{i}.")
            return

        tiles.append(tile_image)
            
    # 이미지 합치기
    output = merge_image(tiles, m, n)

    # 출력 파일명 생성
    output_file_name = f"{output_filename}.jpg"

    # 결과 이미지 저장
    cv2.imwrite(output_file_name, output)

    print(f"{output_file_name}로 저장되었습니다.")

# 실행문
if __name__ == "__main__":
    main()
        

배열을 나누는 프로그램과 같이 입력파일, 행, 열, 출력파일을 받을 것이기 때문에 argv[인덱스]를 이용하여 해당 값들이 잘 들어왔는지 확인합니다.

타일 이미지를 불러오기 위해 새로운 빈 배열을 만든 후 prefix_input_filename(횟수).jpg의 값을 읽도록 합니다.
만약 파일이 없을 때를 대비하여 오류 검출 내용을 if문으로 추가해 준 후 완성된 이미지 데이터를 빈 배열 tiles안에 넣어줍니다.

마지막 함수들을 활용하기 위해 넣은 코드입니다.


이번 시간에는 저번시간에 만든 이미지 데이터를 출력하기 합친 후 출력하기 위한 프로그래밍을 해 보았습니다.

😁 power through to the end 😁

profile
AI (ML/DL) 학습

0개의 댓글