본문 바로가기

Fields Applied with AI/컴퓨터 비전 Computer Vision

Ⅰ. 컴퓨터 비전 기초 (8. 트랙바와 연산 시간 측정)

  • 트랙바(Trackbar) = 프로그램 동작 중 사용자가 지정한 범위 안의 값을 선택할 수 있는 컨트롤러.

트랙바는 OpenCV에서 제공하는 거의 유일한 그래픽 사용자 인터페이스입니다.

 

 

 

 

 

8-(1) 트랙바를 이용한 밝기 조절

Import Library

import numpy as np
import cv2

 

 

Create Trackbar Gnerating Function

def on_level_change(pos):
    value = pos * 16
    if value >= 255:
        value = 255
 
    img[:] = value
    cv2.imshow('image', img)

 

  • 나중에 만들어질 트랙바의 값 위치가 달라질 때마다 호출되는 on_level_change() 콜백 함수를 정의합니다.
  • on_level_change() 함수의 인자인 pos는 트랙바의 값 위치에 해당하는 값을 의미합니다.
  • value = 트랙바 값 위치에 따른 영상 밝기 값. (ex. 트랙바 위치가 3일때 value는 3*16입니다.)
  • 나중에 만들어질 트랙바는 0~16단계로 설정할텐데 이때 최고 단계인 16단계는 pos가 16인 경우로 value값은 256이 됩니다. 영상의 최대 밝기는 255이므로 이를 맞추기 위해서 다음과 같은 조건문을 작성합니다.
  • 만약 value가 255 이상일때 value는 255로 고정시킵니다.
  • img 영상의 전체의 밝기를 트랙바에 의해 조절하므로 img[:]를 value값으로 저장합니다.
  • 'image'라는 영상창에 img를 보여줍니다.

 

 

Create Image

img = np.zeros((480, 640), np.uint8)
cv2.namedWindow('image')

 

  • img = 세로 480 픽셀, 가로 640 픽셀의 밝기가 제일 어두운 제로 행렬 영상.
  • 'image'라는 영상창을 띄웁니다.

 

 

Create createTrackbar Function

cv2.createTrackbar('level', 'image', 0, 16, on_level_change)

 

  • createTrackbar() 함수는 다음과 같은 인자를 받으며 트랙바를 생성합니다.
  • 트랙바의 이름은 'level'이고, 트랙바는 'image' 영상창에 생성하며 최소값은 0, 최대값은 16으로 총 16단계로 생성합니다. 그리고 트랙바의 위치값에 따른 영상 처리는 on_level_change() 콜백 함수를 불러와 처리합니다.

 

 

Print Image 

cv2.imshow('image', img)
cv2.waitKey()
cv2.destroyAllWindows()

 

 

 

 

8-(2) 연산 시간 측정

컴퓨터 비전은 대용량 데이터를 다루고, 일련의 과정을 통해 최종 결과를 얻으므로 매 단계에서 연산 시간을 측정하여 관리할 필요가 있습니다.

Upload Image

from google.colab import files
upload = files.upload()

Saving hongkong.jpg to hongkong.jpg

 

 

Import Library

import sys
import time
import numpy as np
import cv2

 

  • 필요한 라이브러리들을 불러옵니다.

 

 

Create TickMeter Object

tm = cv2.TickMeter()

 

  • tm = TicjMeter()의 객체.

 

 

Measure Time

tm.reset()
tm.start()
t1 = time.time()
 
edge = cv2.Canny(img, 50, 150)
 
t2 = time.time()
tm.stop()

 

  • OpenCV에서 제공하는 연산 시간 측정 클래스와 파이썬에서 기본으로 제공하는 time 모듈의 메소드를 이용하여 각각 시간을 측정해봅니다.
  • 연산 시간을 측정할 때 측정하고자 하는 연산의 앞,뒤에 시각을 측정하는 코드를 적고, 앞,뒤 시각의 차이를 계산하는 방식으로 처리합니다.
  • 시각을 초기화하고 연산 전에 시각을 측정합니다.
  • 영상의 엣지를 검출하는 연산을 수행합니다.
  • 연산 후의 시각을 측정합니다.

 

 

Print Measure Result 

print('time:', (t2 - t1) * 1000)
print('Elapsed time: {}ms.'.format(tm.getTimeMilli()))

time: 206.77733421325684

Elapsed time: 206.3459ms.

 

 

 

 

*참고 : OpenCV를 활용한 컴퓨터 비전과 딥러닝