본문 바로가기

Study Information Technology

OpenCV를 이용한 이미지 처리 자동화 대량 이미지 리사이즈 및 향상

728x90
반응형

OpenCV를 이용한 이미지 처리 자동화: 대량 이미지 리사이즈 및 향상

Overview
OpenCV(Open Source Computer Vision Library)는 컴퓨터 비전 및 이미지 처리 작업을 위한 강력한 라이브러리입니다. 대량의 이미지 처리 작업을 자동화하는 데 특히 유용하며, 리사이징(resizing)이나 이미지 향상(enhancing)과 같은 작업을 효율적으로 수행할 수 있습니다. 이 글에서는 OpenCV를 사용하여 이미지 리사이징 및 향상 작업을 자동화하는 방법을 자세히 설명하겠습니다.

OpenCV 소개

OpenCV는 C++로 작성되었지만, Python, Java 등 여러 프로그래밍 언어에서 사용할 수 있는 바인딩을 제공합니다. 이는 이미지와 비디오 처리, 머신러닝, 그리고 실시간 컴퓨터 비전 프로젝트에서 널리 사용됩니다. OpenCV의 장점은 다음과 같습니다:

  • 다양한 기능: 이미지 필터링, 변형, 변환, 물체 인식 등 다양한 기능 제공.
  • 고속 처리: C++로 작성되어 있어 성능이 뛰어남.
  • 활발한 커뮤니티: 많은 예제와 문서가 제공되어 있어 학습과 문제 해결이 용이함.

이미지 리사이징 자동화

기본적인 리사이징 코드 예시

아래의 코드는 OpenCV를 이용하여 디렉토리에 있는 모든 이미지를 리사이징하는 방법을 보여줍니다.

import cv2
import os

# 리사이즈할 이미지의 경로와 결과를 저장할 경로 설정
input_directory = 'input_images'
output_directory = 'output_images'
resize_dim = (800, 600)  # 리사이즈할 크기

# 출력 디렉토리가 없다면 생성
if not os.path.exists(output_directory):
os.makedirs(output_directory)

# 이미지 파일을 하나씩 처리
for filename in os.listdir(input_directory):
if filename.endswith(('.jpg', '.jpeg', '.png')):
# 이미지 읽기
img_path = os.path.join(input_directory, filename)
img = cv2.imread(img_path)

# 이미지 리사이즈
resized_img = cv2.resize(img, resize_dim)

# 리사이즈한 이미지 저장
output_path = os.path.join(output_directory, filename)
cv2.imwrite(output_path, resized_img)

print("이미지 리사이즈 완료!")

코드 설명

  1. 모듈 임포트: cv2os 모듈을 임포트합니다.
  2. 경로 설정: 입력 이미지와 출력 이미지 경로를 설정합니다. 또한, 리사이즈할 크기를 지정합니다.
  3. 디렉토리 확인: 출력 디렉토리가 존재하지 않을 경우 생성합니다.
  4. 이미지 처리:
  • 입력 디렉토리의 모든 파일을 순회하며, 이미지 파일만 필터링합니다.
  • 각 이미지를 읽어 리사이즈하고, 지정한 출력 경로에 저장합니다.

발생 가능한 에러

  • 파일 경로 오류: 입력 경로가 잘못되었거나 파일이 존재하지 않을 경우, cv2.imread()None을 반환합니다.
  • 메모리 부족: 너무 큰 이미지 파일을 한 번에 처리하려고 할 경우 메모리 오류가 발생할 수 있습니다.

에러 메시지:

TypeError: Can't convert object of type 'NoneType' to 'str' for 'filename'

해결 방법:

  • 경로가 올바른지 확인하고, 이미지가 존재하는지 점검합니다.
  • 메모리 문제는 파일을 한 번에 하나씩 처리하거나, 메모리를 절약할 수 있는 방법을 사용하여 해결합니다.

이미지 향상 자동화

기본적인 이미지 향상 코드 예시

이미지의 품질을 높이기 위해 히스토그램 평활화(histogram equalization) 기법을 사용할 수 있습니다. 다음 코드는 이미지 향상 과정을 보여줍니다.

import cv2
import os

# 이미지 경로 설정
input_directory = 'input_images'
output_directory = 'output_images'

# 출력 디렉토리가 없다면 생성
if not os.path.exists(output_directory):
os.makedirs(output_directory)

# 이미지 파일을 하나씩 처리
for filename in os.listdir(input_directory):
if filename.endswith(('.jpg', '.jpeg', '.png')):
# 이미지 읽기
img_path = os.path.join(input_directory, filename)
img = cv2.imread(img_path)

# 색상 이미지에서 히스토그램 평활화
img_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
img_yuv[:,:,0] = cv2.equalizeHist(img_yuv[:,:,0])
enhanced_img = cv2.cvtColor(img_yuv, cv2.COLOR_YUV2BGR)

# 향상된 이미지 저장
output_path = os.path.join(output_directory, filename)
cv2.imwrite(output_path, enhanced_img)

print("이미지 향상 완료!")

코드 설명

  1. 모듈 임포트 및 경로 설정: 이전 코드와 동일합니다.
  2. 히스토그램 평활화:
  • 이미지를 YUV 색상 공간으로 변환하여 밝기 정보를 분리합니다.
  • Y 채널(밝기)에 대해 히스토그램 평활화를 수행합니다.
  • 다시 BGR 색상 공간으로 변환하여 향상된 이미지를 생성합니다.

발생 가능한 에러

  • 형식 오류: 입력 이미지가 올바른 형식이 아닐 경우, cv2.cvtColor() 함수가 에러를 발생시킵니다.
  • 파일 처리 오류: 이미지 파일에 접근할 수 없는 경우.

에러 메시지:

cv2.error: OpenCV(4.x.x) ... /color.cpp:...: error: (-215: Assertion failed) !empty() in function 'cvtColor'

해결 방법:

  • 이미지 파일이 올바른 형식인지 확인합니다.
  • 파일 경로를 확인하여 접근 가능한지 점검합니다.

참고 문서

이 글을 통해 OpenCV를 활용한 이미지 처리 자동화의 기본 개념과 실습 방법을 이해하는 데 도움이 되었기를 바랍니다. 추가적인 기능 구현이나 심화된 내용이 필요하다면, OpenCV 문서를 참고하시거나 구체적인 예제를 찾아보시는 것도 좋습니다.

728x90
반응형