pencilSketchの引数には以下を指定します。
・元画像
・sigma_s : 0-200の値
・sigma_r : 0-1の値
・shade_factor : 0-0.1の値
サンプルコードの実行手順
1. PySimpleGUIとOpenCVがインストールされた環境の構築以下のページを参照して、環境を構築します。
・PySimpleGUIとOpenCVをインストールしてwebカメラの映像をウインドウを表示する
2. サンプルプログラムの作成と実行
以下のファイルを保存して、実行します。sigma_s, sigma_r, shade_factorはスライダーによって変更できます。
psgui_opencv_pencil.py
import PySimpleGUI as sg
import cv2
sg.theme('SystemDefault')
layout = [
[
sg.Text("sigma_s"),
sg.Slider(key='slider_s', range=(0, 200), default_value=60, orientation='horizontal', expand_x=True)
],
[
sg.Text("sigma_r"),
sg.Slider(key='slider_r', range=(0, 1), resolution=0.01, default_value=0.07, orientation='horizontal', expand_x=True)
],
[
sg.Text("shade_factor"),
sg.Slider(key='shade_factor', range=(0, 0.1), resolution=0.01, default_value=0.02, orientation='horizontal', expand_x=True)
],
[sg.Image(key='img1'), sg.Image(key='img2')]
]
# webカメラをキャプチャー
capture = cv2.VideoCapture(0)
# webカメラの解像度を取得
width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)/2)
height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)/2)
window = sg.Window("webカメラ画面", layout=layout, finalize=True)
# イベントループ
while True:
event, values = window.read(timeout=50)
if event == sg.WIN_CLOSED:
break
rv, frame = capture.read()
if rv is True:
# 左右に並べるために縦横のサイズを半分にリサイズ
resized = cv2.resize(frame, (width, height))
# ペンシルスケッチ加工
sigma_s = values['slider_s']
sigma_r = values['slider_r']
shade_factor = values['shade_factor']
psi = cv2.pencilSketch(resized, sigma_s=sigma_s, sigma_r=sigma_r, shade_factor=shade_factor)
# pngに変換してImage更新
img = cv2.imencode('.png', resized)[1].tobytes()
img2 = cv2.imencode('.png', psi[1])[1].tobytes()
window['img1'].update(data=img)
window['img2'].update(data=img2)
capture.release()
window.close()
・実行方法
以下のコマンドを実行します。
python3 psgui_opencv_pencil.py
関連情報
・PySimpleGUIで画像を表示する・PySimpleGUIに関する他の記事はこちらを参照してください。
・OpenCVに関する他の記事はこちらを参照してください。
0 件のコメント:
コメントを投稿