写真を漫画風にする


RaspberryPiで撮影した写真を、OpenCVを使って漫画風に加工する方法です。
ちなみに今回はUSBカメラを使って撮影した画像をそのまま漫画風に加工しています。
※カメラモジュールをOpenCVで使用した場合は下記のサイトを参考にしてください。

【Raspberry Pi 2】 RasPiカメラモジュールをOpenCVで使用する


スポンサード・リンク

OpenCVのインストール

$ sudo apt-get install libopencv-dev
$ sudo apt-get install python-opencv

画像の漫画化

参考にしたのはこちら
https://github.com/tanaka0079/python/blob/python/opencv/manga.py

#! /usr/bin/env python
# -*- encoding:utf-8 -*-

import cv2
import time
import numpy as np

cap = cv2.VideoCapture(0)
# 3値化の閾値※数値は自分で調節
th1,th2 = 60,60
#キャプチャイメージ取得
r, img = cap.read()
#いるかいらないかわからないが...
time.sleep(3)

#オリジナル画像も保存したい場合はコメントを解除
#cv2.imwrite("sample.jpg" , img)
# 入力画像をグレースケールで取得
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#スクリーン画像読み込み
screen = cv2.imread("screen.jpg",0)
#スクリーン画像リサイズ
screen = cv2.resize(screen,(gray.shape[1],gray.shape[0]))
# エッジ検出と色反転
edge = 255 - cv2.Canny(gray, 80, 120)
# 画像の3値化
gray[gray <= th1] = 0 gray[gray >= th2] = 255
gray[ np.where((gray > th1)&(gray < th2)) ] = screen[ np.where((gray > th1)&(gray < th2)) ]

# 3値画像とエッジ画像を合わせる
gray = cv2.bitwise_and(gray, edge)

#画像保存
cv2.imwrite("AnimeSample.jpg" , gray)

上記のソースを適当な場所に保存して実行するとUSBカメラより取得した画像を漫画風に保存してくれます。

おまけ:
USBカメラからの画像を定期的に漫画風に加工して作成したタイムラプス動画です。右の動画は加工前の写真です。