コラージュを作るときのいわゆるBB(ブルーバック?)のような画像で、背景の単色だけを
抜いてその部分を透過させたいです。
画像はBGRです。最終的に入力に対して出力が周りが透過されてて、ぽつんと撮影対象が写っている感じにしたいです。
一応色を摘出するところまではできたのですが、アルファチャンネルを追加するところで詰まってしまいました。
皆様のお力をお借りしたいです。参考になりそうなサイトなどでもかまいません。
よろしくお願いいたします。
pythonはver2. 、OpenCVはver3です。
python
1import cv2 2import numpy as np 3import sys 4 5cap = cv2.VideoCapture(0) 6 7lower_yellow = np.array([20, 50, 30]) 8upper_yellow = np.array([100, 255, 255]) 9 10gaussian =7 11num = 0 12 13def video2frame(cap): 14 ret, frame = cap.read() 15 image = frame 16 return image 17 18def masking(image, num): 19 #ノイズがやなのでぼかす 20 image = cv2.GaussianBlur(image, (gaussian, gaussian), 0) 21 22 hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) 23 #今回は黄色のバックカラーを想定 24 aim2masking_color = cv2.inRange(hsv, lower_yellow, upper_yellow) 25 26 mask = cv2.bitwise_not(image, image, mask=aim2masking_color) 27 28 masked_upstate = cv2.bitwise_and(image, mask) 29 mask_img = cv2.cvtColor(aim2masking_color, cv2.COLOR_GRAY2RGB) 30 31 #ココでアルファチャンネルを追加(失敗) 32 ''' 33 mask_b, mask_g, mask_r = cv2.split(mask_img) 34 alpha_channel = np.ones(mask_b.shape, dtype=mask_b.dtype) * 50 35 #alpha_mask = cv2.merge((mask_b, mask_g, mask_r, alpha_channel)) 36 obj_image = cv2.addWeighted(masked_upstate, 1, alpha_mask, 1, 0) 37 ''' 38 masked_replaced_white = cv2.addWeighted(masked_upstate, 1, mask_img, 1, 0) 39 40 cv2.imshow("test", masked_replaced_white) 41 #cv2.imwrite("test_%d.png"%(num), obj_image) 42 cv2.waitKey(1) 43 44def main(cap, num): 45 masking(video2frame(cap), num) 46 47while True: 48 main(cap, num) 49 num += 1 50 51cap.release() 52cv2.destroyAllWindows()

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。