PyhonとOpenCVを使って透過画像を合成したいと思い、サイトを参考にしてみましたが
エラーが出てしまい困っています。
[参考サイト様]
http://pynote.hatenablog.com/entry/opencv-image-composing-by-mask
このサイト内のプログラムをそのまま書いて実行しました。流れ的には3枚の画像が
段階を追って出力されるのですが2枚目まで出力された後、最後の部分でエラーが出てしまいます。
[開発環境]
Python 3.6.6 opencv-python3.4.4.19 Pycharm
[エラー内容]
Traceback (most recent call last):
File "C:/Users/Lovedelic/OneDrive/Documents/FishTutorial/Alphatest.py", line 36, in <module>
roi = background[y:y + h, x:x + w, :]
TypeError: 'NoneType' object is not subscriptable
[プログラム内容]
Python
1import cv2 2import matplotlib.pyplot as plt 3import numpy as np 4 5def imshow(img): 6 if img.ndim == 2: 7 plt.imshow(img, cmap='gray') 8 else: 9 plt.imshow(img[...,::-1]) 10 plt.axis('off') 11 plt.show() 12 13# 背景画像及び前景画像を読み込む。 14background = cv2.imread('C:/Users/Lovedelic/Desktop/image/Lena.png') 15foreground = cv2.imread('C:/Users/Lovedelic/Desktop/image/Fish.png') 16 17# グレースケールに変換する。 18gray = cv2.cvtColor(foreground, cv2.COLOR_BGR2GRAY) 19# 2値化する。 20_, binary = cv2.threshold(gray, 250, 255, cv2.THRESH_BINARY_INV) 21imshow(binary) 22 23# 輪郭抽出する。 24_, contours, hierarchy = cv2.findContours( 25 binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 26 27# 検出された輪郭内部を (255, 255, 255) で塗りつぶす。 28mask = np.zeros_like(foreground) 29cv2.drawContours(mask, contours, -1, color=(255, 255, 255), thickness=-1) 30 31# 以上の手順で前景画像のうち、合成する画素を (255, 255, 255) としたマスク画像が作成できた。 32imshow(mask) 33 34h, w = foreground.shape[:2] # 前景画像の大きさ 35x, y = 100, 200 # 背景画像の座標上で前景画像を貼り付ける位置 36roi = background[y:y + h, x:x + w, :] 37result = np.where(mask==255, foreground, roi) 38 39imshow(result) 40
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/10 09:47