OpenCV를 사용하여 트랙바를 생성하고, 트랙바의 이벤트에 따라 이미지를 조작
[공지사항] 지킬블로그 안내드립니다.
지킬 블로그에 대하여 알아보겠습니다.
import numpy as np
import cv2
imageFile = './data/lena.jpg'
imgs = cv2.imread(imageFile)
# 트랙바 이벤트 발생 시 실행될 함수
def onChange(pos):
global imgs
# 'R' 트랙바의 위치 값을 읽음
r = cv2.getTrackbarPos('R', 'img')
# 원본 이미지를 복사
img_copy = imgs.copy()
# 빨간색 채널 값 변경
img_copy[:, :, 2] = r
# 변경된 이미지를 창에 표시
cv2.imshow('img', img_copy)
# 초기 이미지를 창에 표시
cv2.imshow('img', imgs)
# 트랙바 생성
# 트랙바 이름 ('R'), 들어갈 창 이름 ('img'), 초기값 (0), 범위 (255), 이벤트 함수 (onChange)
cv2.createTrackbar('R', 'img', 0, 255, onChange)
# 트랙바 위치 초기화
cv2.setTrackbarPos('R', 'img', 0)
cv2.waitKey() # 사용자 입력 대기
cv2.destroyAllWindows()
-
라이브러리 임포트:
import numpy as np import cv2numpy는 수치 연산을 수행하는 파이썬 패키지입니다.cv2는 OpenCV(오픈 컴퓨터 비전) 라이브러리입니다. 이미지 처리 및 컴퓨터 비전 작업을 위한 다양한 함수와 도구를 제공합니다.
-
이미지 읽기:
imageFile = './data/lena.jpg' imgs = cv2.imread(imageFile)imageFile변수에는 이미지 파일의 경로가 저장됩니다.cv2.imread()함수를 사용하여 이미지 파일을 읽어들입니다. 읽어들인 이미지는imgs변수에 저장됩니다.
-
트랙바 이벤트 핸들러 함수 정의:
def onChange(pos): global imgs r = cv2.getTrackbarPos('R', 'img') img_copy = imgs.copy() img_copy[:, :, 2] = r cv2.imshow('img', img_copy)onChange()함수는 트랙바의 이벤트가 발생할 때마다 호출됩니다.pos매개변수는 트랙바의 위치를 전달받습니다.cv2.getTrackbarPos()함수를 사용하여 ‘R’ 트랙바의 위치를 읽어옵니다. 이 값은 빨간색 채널의 강도로 사용됩니다.imgs.copy()를 사용하여 원본 이미지를 복사합니다. 그렇게 함으로써 원본 이미지를 변경하지 않고 새로운 이미지를 생성합니다.- 빨간색 채널의 값을 트랙바의 위치에 따라 변경하고, 변경된 이미지를 화면에 표시합니다.
-
초기 이미지 표시:
cv2.imshow('img', imgs)cv2.imshow()함수를 사용하여 초기 이미지를 화면에 표시합니다. 초기 이미지는imgs변수에 저장된 이미지입니다.
-
트랙바 생성:
cv2.createTrackbar('R', 'img', 0, 255, onChange)cv2.createTrackbar()함수를 사용하여 ‘R’이라는 이름의 트랙바를 생성합니다.- 생성된 트랙바는 ‘img’ 창에 표시되며, 초기 위치는 0입니다. 트랙바의 최대 위치는 255로 설정되어 있습니다.
- 트랙바의 위치가 변경될 때마다
onChange함수가 호출됩니다.
-
트랙바 위치 초기화:
cv2.setTrackbarPos('R', 'img', 0)- 트랙바의 초기 위치를 0으로 설정합니다. 즉, 초기에는 빨간색 채널의 강도가 0으로 설정됩니다.
-
키 입력 대기 및 창 닫기:
cv2.waitKey() cv2.destroyAllWindows()cv2.waitKey()함수를 사용하여 사용자의 키 입력을 대기합니다. 사용자가 키를 누를 때까지 대기합니다.cv2.destroyAllWindows()함수를 호출하여 모든 창을 닫습니다. 사용자가 어떤 키를 누르더라도 모든 창이 닫힙니다.
댓글남기기