Voici mon code pour le mélange d'images, mais il y a un problème avec la fonction 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()
L'erreur est:
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
Quel est le problème? J'ai recherché la fonction et je suis sûr que la fonction est correcte. Je n'ai pas compris l'erreur!
Lorsque vous exécutez ceci:
dst= cv2.addWeighted(img1,0.5,img2,0.5,0)
Informations sur l'erreur:
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
Raisons possibles:
not np.ndarray
, comme None
. Peut-être que vous ne l'avez pas lu.img1.shape
n'est pas égal à img2.shape
. Ils ont des tailles différentes.Vous devriez vérifier img1.shape
et img2.shape
avant de faire directement cv2.addWeighted
si vous n'êtes pas sûr qu'ils soient de la même taille.
Ou, si vous voulez ajouter une petite image sur la grande, vous devez utiliser ROI
/mask
/slice
op.
Comme indiqué dans l'un des commentaires de la question et de la raison 2 de la réponse ci-dessus, vous pouvez également essayer de redimensionner l'une des images pour qu'elle corresponde à l'autre, puis essayez la addWeighted.
Votre code ressemblerait alors à celui-ci:
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()
même j'obtenais la même erreur. C'est à cause de différentes tailles d'images, alors j'ai utilisé ROI (région de l'image), c'est-à-dire, juste prendre une partie de l'image qui est identique à une autre taille d'image. utilisez ce code:
part = img [0: 168,0: 300]
Ensuite, vous obtenez des images de même taille, puis effectuez des opérations sur celles-ci.