我正在使用 cv2 工具箱并想混合/加权两张图片,其中一张图片是出现在第一张图片中的服装的面具。然而,加权图片看起来太亮了,与参数值无关。我多次切换alpha,beta,gamma,没有任何显着差异。有谁知道为什么所有颜色似乎都被抑制了,以及我如何才能真正混合两张图片,以便在原始图片中明显突出显示蒙版对象?您可以在这里看到所有三张图片 。我在 colab 中使用以下代码:
import pdb
for i in range(len(md)):
imag = cv2.imread("chloe/"+md.ImageId[i]+".jpg")
#pdb. set_trace()
imag = _scale_image(imag, 1024)
mask = cv2.resize(np.float32(md.Maskdata[i]), (imag.shape[1],imag.shape[0]), interpolation=cv2.INTER_NEAREST)
where = np.where(mask!=0)
y1,y2,x1,x2 = 0,0,0,0
if len(where[0]) > 0 and len(where[1]) > 0:
y1,y2,x1,x2 = min(where[0]),max(where[0]),min(where[1]),max(where[1])
if y2>y1+80 and x2>x1+80 and np.sum(mask)/255 > 1000:
print("image id=",md.ImageId[i])
plt.subplot(1,3,1)
plt.imshow(imag)
plt.subplot(1,3,2)
plt.imshow(mask)
plt.subplot(1,3,3)
mask2 = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
dst = cv2.addWeighted(np.float32(imag), 0.5, mask2, 0.5, 0)
plt.imshow(dst)
plt.show()
具有以下功能:
import math
def _scale_image(img, long_size):
if img.shape[0] < img.shape[1]:
scale = img.shape[1] / long_size
size = (long_size, math.floor(img.shape[0] / scale))
else:
scale = img.shape[0] / long_size
size = (math.floor(img.shape[1] / scale), long_size)
return cv2.resize(img, size, interpolation=cv2.INTER_NEAREST)