Python版OpenCVで漫画化カメラアプリを作成する方法をソースコード付きで解説します。
漫画化カメラアプリの作成
Python版OpenCVの空間フィルタ処理などを組み合わせると画像を漫画風に加工できます。
今回はこれを応用して、USBカメラの映像を漫画風に加工してみます。
| – | 参考記事 |
|---|---|
| 1 | 【Python/OpenCV】写真・画像を漫画風に加工 |
| 2 | 写真を漫画風に加工する原理・仕組み |
ソースコード(Python3+OpenCV3)
サンプルプログラムのソースコードです。
# -*- coding: utf-8 -*-
import cv2
import numpy as np
# 漫画化フィルタ
def manga_filter(src, screen, th1=60, th2=150):
# グレースケール変換
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
screen = cv2.cvtColor(screen, cv2.COLOR_BGR2GRAY)
# スクリーントーン画像を入力画像と同じ大きさにリサイズ
screen = cv2.resize(screen,(gray.shape[1],gray.shape[0]))
# Cannyアルゴリズムで輪郭検出し、色反転
edge = 255 - cv2.Canny(gray, 80, 120)
# 三値化
gray[gray = th2] = 255
gray[ np.where((gray > th1) & (gray th1)&(gray < th2)) ]
# 三値画像と輪郭画像を合成
return cv2.bitwise_and(gray, edge)
def main():
# 動画の読み込み
cap = cv2.VideoCapture(0)
# スクリーントーン画像の読み込み
screen = cv2.imread("screen.jpg")
# 動画終了まで繰り返し
while(cap.isOpened()):
# フレームを取得
ret, frame = cap.read()
# 漫画化フィルタ処理
manga = manga_filter(frame, screen, 60, 150)
# フレームを表示
cv2.imshow("input", frame)
cv2.imshow("Flame", manga)
# qキーが押されたら途中終了
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
実行結果
■スクリーントーン画像

■入力(カメラ映像)と出力(漫画化後)


関連コンテンツ

PythonとOpenCVで画像処理プログラミング超入門
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
【画像処理超入門】アルゴリズムの仕組みと実装方法を簡単に解説
画像処理超アルゴリズムの仕組みとプログラミングによる実装方法を簡単に解説します。


コメント