Python OpenCV 입문

TaeHyun Lee·2023년 9월 11일
0

OpenCV(Open Source Computer Vision Library)는 컴퓨터 비전 및 이미지 처리 작업을 수행하는 데 사용되는 강력한 오픈 소스 라이브러리입니다. 이 블로그 포스팅에서는 OpenCV의 기초적인 사용법과 몇 가지 유용한 기능을 다룰 것입니다.

1. 데이터 타입 확인하기

우선, 이미지 파일을 읽어와서 데이터의 타입을 확인하는 방법을 알아봅시다.

import cv2

# 이미지 파일 읽기
img = cv2.imread('data/messi5.jpg')

# 데이터 shape 확인
print(img.shape)

# 데이터 크기 확인
print(img.size)

# 데이터 타입 확인
print(img.dtype)

이 코드는 'messi5.jpg' 이미지를 읽어와서 해당 이미지의 shape, size, dtype을 출력합니다.

  • shape: 이미지의 높이, 너비 및 채널 수를 나타내는 튜플입니다.
  • size: 이미지의 총 픽셀 수입니다.
  • dtype: 이미지 데이터의 타입입니다.

2. 이미지 나누고 합치기

이미지를 채널별로 나누고 다시 합치는 방법을 알아봅시다.

import cv2

# 이미지 파일 읽기
img = cv2.imread('data/messi5.jpg')

# 이미지 채널 나누기
b, g, r = cv2.split(img)

# 나눈 이미지 채널 보여주기
cv2.imshow('Blue Channel', b)
cv2.imshow('Green Channel', g)
cv2.imshow('Red Channel', r)

# 이미지 채널 합치기
img_merged = cv2.merge((b, g, r))

# 합친 이미지 보여주기
cv2.imshow('Merged Image', img_merged)

cv2.waitKey(0)
cv2.destroyAllWindows()

이 코드는 이미지를 BGR 채널로 나누고, 다시 합치는 방법을 보여줍니다.

3. 이미지 리사이즈를 이용한 합치기

이미지를 리사이즈하고 합치는 방법을 알아봅시다.

import cv2

# 이미지 파일 읽기
img = cv2.imread('data/messi5.jpg')
img2 = cv2.imread('data/opencv-logo.png')

# 부분 이미지 추출
ball = img[280:340, 330:390]

# 부분 이미지 합치기
img[273:333, 100:160] = ball

# 이미지 리사이즈
img = cv2.resize(img, (512, 512))
img2 = cv2.resize(img2, (512, 512))

# 이미지 합치기
dst = cv2.addWeighted(img, 0.9, img2, 0.1, 0)

# 합친 이미지 보여주기
cv2.imshow('Merged Image', dst)

cv2.waitKey(0)
cv2.destroyAllWindows()

이 코드는 이미지를 리사이즈하고 두 이미지를 가중치를 적용하여 합치는 방법을 보여줍니다.

4. Bitwise 연산

비트 연산을 사용하여 이미지를 처리하는 방법을 알아봅시다.

import cv2
import numpy as np

# 두 개의 검정 이미지 생성
img1 = np.zeros((250, 500, 3), np.uint8)
img1 = cv2.rectangle(img1, (200, 0), (300, 100), (255, 255, 255), -1)

img2 = np.zeros((250, 500, 3), np.uint8)
img2 = cv2.rectangle(img2, (250, 0), (500, 250), (255, 255, 255), -1)

# 비트 연산 수행
bitAnd = cv2.bitwise_and(img2, img1)
bitOr = cv2.bitwise_or(img2, img1)
bitXor = cv2.bitwise_xor(img1, img2)
bitNot1 = cv2.bitwise_not(img1)
bitNot2 = cv2.bitwise_not(img2)

# 결과 이미지 보여주기
cv2.imshow("Image 1", img1)
cv2.imshow("Image 2", img2)
cv2.imshow('Bitwise AND', bitAnd)
cv2.imshow('Bitwise OR', bitOr)
cv2.imshow('Bitwise XOR', bitXor)
cv2.imshow('Bitwise NOT 1', bitNot1)
cv2.imshow('Bitwise NOT 2', bitNot2)

cv2.waitKey(0)
cv2.destroyAllWindows()

이 코드는 두 개의 이미지에 대해 AND, OR, XOR, NOT 연산을 수행하여 결과를 보여줍니다.

5. Trackbar

트랙바를 사용하여 이미지를 동적으로 변경하는 방법을 알아봅시다.

import numpy as np
import cv2 as cv

def nothing(x):
    print(x)

# 빈 화면 생성
img = np.zeros((300, 512, 3), np.uint8)
cv.namedWindow('image')

# 트랙바 생성
cv.createTrackbar('B', 'image', 0, 255, nothing)
cv.createTrackbar('G', 'image', 0, 255, nothing)
cv.createTrackbar('R', 'image', 0, 255, nothing)

switch = '0 : OFF\n 1 : ON'
cv.createTrackbar(switch, 'image', 0, 1, nothing)

while True:
    cv.imshow('image', img)
    k = cv.waitKey(1) & 0xFF
    if k == 27:
        break

    # 트랙바 값 가져오기
    b = cv.getTrackbarPos('B', 'image')
    g = cv.getTrackbarPos('G',

Python OpenCV의 기초적인 사용법과 다양한 기능을 다뤘습니다. OpenCV는 컴퓨터 비전 및 이미지 처리 작업에 매우 유용한 도구이므로, 여기서 다룬 내용을 기반으로 더 복잡하고 흥미로운 프로젝트를 진행할 수 있을 것입니다!!

profile
서커스형 개발자

0개의 댓글