공부하는 아저씨의 IT 공방

파이썬 시각화 공부 5일(event-mouse, keyboard, track bar) 본문

파이썬 기초(1일 1코드)

파이썬 시각화 공부 5일(event-mouse, keyboard, track bar)

공대아저씨 2023. 9. 9. 23:04

안녕하세요 공대아저씨 입니다 ㅎ

 

제 블로그에 누적 방문자수가 25명이네요 ㅎ

 

아직 큰 수치는 아니지만 그래도 열심히 하다보면 분명 제 글을 읽어주시는 분들도 많이 생겨나겠죠?ㅎ

 

그런 희망을 갖고 오늘도 코딩을 해봅니다 :)

 

오늘은 지난시간에 공지한 바와 같이

 

event-mouse, keyboard, track bar에 대해서 한번 알아보겠습니다.

 

실습이미지 다운로드

cats_0.jpg
0.02MB
fruits.jpg
0.05MB

 

 

Keyboard 입력 만들기

가장 먼제 keyboard 입력에 따른 이미지 처리에 대해서 실습해 보겠습니다.

 

우린 지난 시간에 bgr과 rgb에 대한 내용들을 공부했었습니다. 

 

그러면 키보드 버튼 r을 누를 때 bgr이 rgb로 변경되는 코드를 작성해보겠습니다. 

## keyboard 입력에 따라 이미지 처리하기

import cv2

img =cv2.imread('./img/cats_0.jpg')
#cv2.imshow('img1', img+50)
#cv2.imshow('img2', img+50)  # 이미지는 결국 매트릭스이고 거기에 50을 더하면 밝기가 밝아짐

cv2.imshow('img', img)

while True :
    key =cv2.waitKey()
    if key == ord('r'):  #r 버튼을 누르면 bgr을 rgb로 변경
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        cv2.imshow('img', img+30)
    elif key == ord('i'):
        img = ~img # ~은 논리연산자 not
        cv2.imshow('img', img)        
    elif key == ord('p'):
        img = img+15 # 계속 밝아지게끔
        cv2.imshow('img', img)
        
        
    elif key ==27:
            break
            
        
cv2.destroyAllWindows()

변경 전(좌) 변경 후(우)

 

 

Event-mouse 만들기

자 이번에는 2번째로 event-mouse에 대해서 한번 알아보겠습니다.

 

event-mouse는 마우스를 이용해서 빈 공간에 그림을 그리고나 표시를 하는 것을 의미하는데 

 

코드는 다음과 같습니다.

 

## LbuttonDown drawing lines

import cv2
import numpy as np
import sys

oldx = oldy = -1

def mouse_fn(event, x, y, flags, param):
    global oldx, oldy
    
    if event == cv2.EVENT_LBUTTONDOWN:
        oldx, oldy = x, y
        print('Event_LBUTTON_DOWN', (x, y))
        
    elif event == cv2.EVENT_LBUTTONUP:
        print('Event_LBUTTON_UP', (x, y))

    elif event == cv2.EVENT_MOUSEMOVE:
         if flags & cv2.EVENT_FLAG_LBUTTON:
            cv2.line(img, (oldx, oldy), (x, y), (0,0,250), 4, cv2.LINE_AA)       
            cv2.imshow('img', img)
            oldx, oldy = x, y;
                
img = np.ones((240, 320, 3), dtype = np.uint8)*255
cv2.namedWindow('img')
cv2.setMouseCallback('img', mouse_fn, img)
cv2.imshow('img', img)
cv2.waitKey()
cv2.destroyAllWindows()

 

마우스 이벤트를 하기 위해서는 먼저,  마우스 이벤트를 처리하는 함수가 필요합니다.

 

Event_LBUTTON_DOWN은 마우스 버튼을 누를때의 현재 마우스 좌표를 저장하고,

 

Event_LBUTTON_UP은 마우스 버튼을 놓을때 작동하게 되며 현재 마우스 좌표를 출력합니다.

 

EVENT_MOUSEMOVE는 마우스가 이동할때 호출되는데, 이때는 마우스 버튼이 눌린 상태에서만 실행이 됩니다.

 

자 그래서 프로그램을 실행하면 다음과 같은 화면으로 나오게 됩니다.

 

이미지 출력결과

 

 

자, 마지막으로 트랙바를 이용한 gray-scale 조절을 해보겠습니다. 

 

지난번 gray-scale을 조절하는 것이 시각화에서는 어떤 경계를 찾거나, 이미지를 처리하는 속도를 올리는데 사용 할 수 있다고 설명드렸습니다. 오늘은 그걸 조절바에 의해서 한번 바꿀 수 있도록 코드륵 작성해보겠습니다.

 

Trackbar 만들기

## Trackbar

import cv2
import numpy as np

def nothing(x):
    pass

frame = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('frame')

cv2.createTrackbar('Red', 'frame', 0, 255, nothing)

while True:
    cv2.imshow('frame', frame)
    key = cv2.waitKey(10)
    
    if key == 27:
        break
    
    r = cv2.getTrackbarPos('Red', 'frame')
    
    frame[:] = [0, 0, r]
cv2.destroyAllWindows()

이 코드를 사용하게 되면 기본적으로 0부터 255까지의 수를 조절할 수있는데,

 

[0, 0, r]에 대한 값을 조절 하는 것이기 때문에 bgr 즉, r계열의 색상값을 조절 할 수 있습니다.

 

 

Trackbar 3개 만들기

이번에는 모든 b g r 값에 대한 trackbar를 만들어 보았습니다.

## Trackbar 3개 만들기 

import cv2
import numpy as np

def nothing(x):
    pass

frame = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('frame')

cv2.createTrackbar('Red', 'frame', 0, 255, nothing)
cv2.createTrackbar('Green', 'frame', 0, 255, nothing)
cv2.createTrackbar('Blue', 'frame', 0, 255, nothing)

while True:
    cv2.imshow('frame', frame)
    key = cv2.waitKey(10)
    
    if key == 27:
        break
    
    r = cv2.getTrackbarPos('Red', 'frame')
    g = cv2.getTrackbarPos('Green', 'frame')
    b = cv2.getTrackbarPos('Blue', 'frame')
    frame[:] = [b, g, r]
cv2.destroyAllWindows()

 

색상을 조절하면, 이미지의 밝기도 조절하면 이미지를 갖고 할 수 있는 것이 더 많아 지겠죠?

 

밝기 조절도 해보았습니다.

 

+@ 밝기조절 추가

밝기 조절 트랙바를 만드는 것도 같은 원리 입니다.

## Trackbar 이미지 밝기조절 추가

## Trackbar 3개 만들기 

import cv2
import numpy as np

def nothing(x):
    pass

frame = cv2.imread('./img/fruits.jpg')
cv2.namedWindow('frame')

cv2.createTrackbar('brightness', 'frame', 0, 255, nothing)

while True:
    cv2.imshow('frame', frame+r)
    key = cv2.waitKey(10)
    
    if key == 27:
        break
    
    r = cv2.getTrackbarPos('brightness', 'frame')     
    
cv2.destroyAllWindows()

밝기조절

 

자 지금까지 event-mouse, keyboard, track bar에 대해서 알아보았습니다.

 

다음시간부터는 지금까지 배운 것들을 실제 이미지에 적용해보는 실습을 진행해 보도록 하겠습니다.

 

오늘도 긴글 읽어주셔서 감사합니다. :)