我试图使用cv2.addWeighted(...)
在图像顶部添加覆盖,但它会引发以下错误:
dst = cv2.addWeighted(logo, alpha, overlay, 1-alpha, 0)
cv2.error: OpenCV(4.4.0) /tmp/pip-req-build-99ib2vsi/opencv/modules/core/src/arithm.cpp:691: error: (-5:Bad argument) When the input arrays in add/subtract/multiply/divide functions have different types, the output array type must be explicitly specified in function 'arithm_op'
这个错误对我来说没有意义,因为我检查了文档并且我的参数是正确的。这是我的密码
def overlay(path):
logo = cv2.imread(path, cv2.IMREAD_UNCHANGED)
alpha = logo[:, :, 3]
overlay = np.zeros(logo.shape, dtype=np.uint8)
overlay[:, :, 2] = alpha
overlay[:, :, 3] = alpha
alpha = 0.5
dst = cv2.addWeighted(logo, alpha, overlay, 1-alpha, 0)
pil_image = Image.fromarray(dst).convert('RGBA')
return pil_image
更新
因此,覆盖现在可以工作了,但存在一些问题。我对我的代码做了以下更改:
dst = cv2.addWeighted(logo, alpha, overlay, 1 - alpha, 0, dtype=cv2.CV_32F).astype(np.uint8)
这就是当我更改覆盖上的颜色时发生的情况
新的完整代码:
def overlay(path):
logo = cv2.imread(path, cv2.IMREAD_UNCHANGED)
alpha = logo[:, :, 3]
overlay = np.zeros(logo.shape, dtype=np.uint8)
overlay[:, :, 2] = alpha
r = 0
g = 255
b = 0
overlay[:, :, :3] = r, g, b
# overlay[:, :, 3] = alpha
alpha = 0.5
dst = cv2.addWeighted(logo, alpha, overlay, 1 - alpha, 0, dtype=cv2.CV_32F).astype(np.uint8)
pil_image = Image.fromarray(dst).convert('RGBA')
徽标和覆盖对象具有不同的数据类型,导致分析错误。要解决此问题,必须在addWeighted命令中指定输出的数据类型。下面是一个32型输出的示例:
来源/其他参考资料:
https://github.com/Prasad9/ImageAugmentationTypes/issues/2
将颜色设置为覆盖:
相关问题 更多 >
编程相关推荐