OpenCV에서 트랙 바를 사용하여 이미지 임계 값 조정

2259 단어 파이썬OpenCV

소개



OpenCV 트랙 바를 사용하여,
이미지 처리 시 파라미터를 조정하기 위한 테스트 프로그램.
이번에는 감마 보정 된 이미지에 대해 이진화가 수행됩니다.

테스트용 이미지 로드



카메라에서 얻은 이미지를 사용합니다.
취득한 화상을 그레이 스케일로 변환하여 화소값의 최대를 취득(감마 보정용)
import cv2
import sys

cameraId = 0

capCam = cv2.VideoCapture(cameraId)
if not capCam.isOpened():
    sys.exit()

ret, frame = capCam.read()

gray = cv2.cvtColor(frame, cv2.COLOR_RGBA2GRAY)
grayMax = gray.max()

트랙바 생성



감마 보정 값 (gamma)과 임계 값 (threshold1)을 조정하기위한 트랙 바 생성
gamma = 0.5
threshold = 28

def nothing(x):
    pass

cv2.namedWindow('window')

cv2.createTrackbar('gamma','window', int(gamma*10) , 50, nothing)
cv2.createTrackbar('threshold1','window', threshold , 255, nothing)

인수는 다음과 같습니다.
CreateTrackbar(trackbarName, windowName, value, count, onChange)
- trackbarname : 생성되는 트랙 바의 이름
- windowName : 작성되는 트랙 바의 부모로서 사용되는 윈도우의 이름 (사전에 생성해 둔다)
- value : 생성시 슬라이더 위치
- count : 슬라이더의 최대값(최소값은 0 고정)
- onChange : 슬라이더 위치 변경 시 콜백

gamma에는 0.1 단위의 값을 적용하고 싶기 때문에,
트랙 바상은 10배한 값으로 하고 있다.

트랙바 및 이미지 표시



트랙바에서 값을 가져와 이미지에 적용
import numpy as np

delay = 1
ESC_KEY = 27

while True:
    # ESCキーを入力したら終了
    if cv2.waitKey(delay) == ESC_KEY:
        break

    # トラックバーから値を取得
    gamma = cv2.getTrackbarPos('gamma','window')
    threshold = cv2.getTrackbarPos('threshold1','window')

    if gamma > 0:
        gamma /= 10
    else:
        gamma = 0.1

    # ガンマ補正
    lut = np.zeros((256, 1), dtype='uint8')
    for i in range(256):
        lut[i][0] = grayMax * pow(float(i)/grayMax, 1.0/gamma)
    gray_gamma = cv2.LUT(gray, lut)

    # 二値化
    ret, threshold = cv2.threshold(gray_gamma, threshold, 255, cv2.THRESH_BINARY)

    # 描画
    cv2.imshow("window", threshold)

gamma는 1/10으로 한 값을 사용한다.
0은 허용되지 않기 때문에 0.1로 보정한다.

표시하면 다음과 같은 이미지가됩니다.
슬라이더로 파라미터를 변경하면 적용된 값으로 그려진다.

좋은 웹페이지 즐겨찾기