これは画像ブレンド用の私のコードですが、cv2.addweighted()関数に問題があります:
import cv2
import numpy as np
img1 = cv2.imread('1.png')
img2 = cv2.imread('messi.jpg')
dst= cv2.addWeighted(img1,0.5,img2,0.5,0)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
エラーは:
Traceback (most recent call last):
dst= cv2.addWeighted(img1,0.5,img2,0.5,0)
cv2.error: C:\projects\opencv-python\opencv\modules\core\src\arithm.cpp:659: error: (-209) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function cv::arithm_op
何が問題ですか?関数を検索し、関数が正しいことを確認しました。エラーを理解できませんでした!
これを実行すると:
dst= cv2.addWeighted(img1,0.5,img2,0.5,0)
エラー情報:
error: (-209) The operation is neither 'array op array'
(where arrays have the same size and the same number of channels),
nor 'array op scalar', nor 'scalar op array' in function cv::arithm_op
考えられる理由:
not np.ndarray
です(None
など)。多分あなたはそれを読んでいないでしょう。img1.shape
はimg2.shape
と等しくありません。サイズが異なります。同じサイズかどうかわからない場合は、直接img1.shape
を実行する前に、img2.shape
とcv2.addWeighted
を確認してください。
または、大きな画像に小さな画像を追加する場合は、ROI
/mask
/slice
opを使用する必要があります。
上記の質問の質問と理由2のコメントの1つで指摘したように、画像の1つを他の画像と一致するようにサイズ変更してから、 addWeighted。
コードは次のようになります。
import cv2
import numpy as np
img1 = cv2.imread('1.png')
img2 = cv2.imread('messi.jpg')
# Read about the resize method parameters here: https://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html?highlight=resize#resize
img2_resized = cv2.resize(img2, (img1.shape[1], img1.shape[0]))
dst = cv2.addWeighted(img1, 0.7, img2_resized, 0.3, 0)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
私でも同じエラーが発生していました。画像のサイズが異なるため、ROI(画像の領域)を使用しました。つまり、別の画像サイズと同じ画像の一部を取得します。このコードを使用してください:
part = img [0:168,0:300]
次に、同じサイズの画像を取得し、それらに対して操作を実行します。