フィルタをカメラのレンズに取り付けることによって、撮る写真のイメージを大きく変えることができます。
画像のようにカラーフィルムを取り付ければ画像全体が赤っぽくなったりっていう感じですね。
カメラに取り付ける場合はハードウェア的な処理になりますが、今回はソフトウェア的に色彩強調フィルタをかけます。
この機能はどの画像編集ソフトにもある機能ですが、なかなか取り扱ってくれてるサイトが無かったのでPythonの勉強がてら作りました。
処理方法としては
1.単色の画像を作る
2.フィルタをかけたい画像に透過した単色画像をのせる
という単純なものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import numpy as np import cv2 import os.path class ColorFil: def __init__(self,src,b,g,r): print "Make ColorFilter" self.im = cv2.imread(src) #カラー画像 if len(self.im.shape) == 3: self.size = self.im.shape[:3] #モノクロ画像 else : self.size = self.im.shape[:2] self.size[3] = 1 self.color_img = np.zeros(self.size,dtype=np.uint8)#無色画像生成 self.color_img[:] = (b,g,r)#単色画像にする def SyntheisImg(original,fil,alpha,beta): add_img = cv2.addWeighted(fil,alpha,original,beta,0) return add_img if __name__ == "__main__": src = "File Path" g,b,r = 0,0,255 #フィルタの色 #フィルタ画像の生成 color_fil=ColorFil(src,g,b,r) #画像の統合。引数:元画像,フィルタ画像,フィルタのアルファ値,ガンマ値 Output_img = SyntheisImg(cv2.imread(src),color_fil.color_img,0.7,0.3) cv2.imshow("("+str(g)+","+str(b)+","+str(r)+")filtering-"+os.path.basename(src),Output_img) cv2.imwrite("("+str(g)+","+str(b)+","+str(r)+")filtering-"+os.path.basename(src),Output_img) cv2.waitKey(0) |
フィルタ生成はなんとなくクラスで作ってありますが、普通に関数で問題無いです笑
○元画像
○処理画像
CCICの色相6色
白黒
重箱の隅をつつくような指摘で恐縮ですが,一部ソースコードが誤っているようです.
誤)
g,b,r = 255,0,0 #フィルタの色
#フィルタ画像の生成
color_fil=ColorFil(src,g,b,r)
正)
b,g,r = 255,0,0 #フィルタの色
#フィルタ画像の生成
color_fil=ColorFil(src,b,g,r)