0

我正在使用 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)
4

0 回答 0