openCv中透明重叠图像的问题

2024-10-05 11:21:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我有图像的透明部分,但我不确定它是否真的是透明的,因为我看不到透明部分后面是什么,看起来好像什么都没有,但下面应该是另一个图像,问题看起来是like thislike this。如果我不使用遮罩删除黑色边it looks like this

我希望使边完全透明或完全删除它们

谢谢你的帮助。祝你今天愉快

这就是我加载图像的方式

    trainImg = cv2.imread(fnames[x], cv2.IMREAD_UNCHANGED)
    trainImg_gray = cv2.cvtColor(trainImg, cv2.COLOR_RGB2GRAY)

    queryImg = cv2.imread(fnames[y], cv2.IMREAD_UNCHANGED)
    queryImg_gray = cv2.cvtColor(queryImg, cv2.COLOR_RGB2GRAY)

这就是我处理图片的方式

        height = trainImg.shape[0] + queryImg.shape[0]
        width = trainImg.shape[1] + queryImg.shape[1]
        dim = (trainImg.shape[1], trainImg.shape[0])
        print(fnames_cropped[x])

        trainImg = cv2.imread(fnames_cropped[x])
        (b, g, r) = cv2.split(trainImg)
        trainImg = cv2.merge([r, g, b])
        trainImg = cv2.resize(trainImg, dim)

        trainImg = trim(trainImg)

        dim = (queryImg.shape[1], queryImg.shape[0])
        print(fnames_cropped[y])
        queryImg = cv2.imread(fnames_cropped[y])
        (b, g, r) = cv2.split(queryImg)
        queryImg = cv2.merge([r, g, b])

        queryImg = cv2.resize(queryImg, dim)

        queryImg = trim(queryImg)

        # Make mask of black pixels - mask is True where image is black
        RGB = np.array(trainImg)
        h, w = RGB.shape[:2]

        # Add an alpha channel, fully opaque (255)
        RGBA = np.dstack((RGB, np.zeros((h, w), dtype=np.uint8) + 255))

        # Make mask of black pixels - mask is True where image is black
        mBlack = (RGBA[:, :, 0:3] == [0, 0, 0]).all(2)

        # Make all pixels matched by mask into transparent ones
        RGBA[mBlack] = (0, 0, 0, 0)

        trainImg = RGBA

        # Make mask of black pixels - mask is True where image is black
        RGB = np.array(queryImg)
        h, w = RGB.shape[:2]

        # Add an alpha channel, fully opaque (255)
        RGBA = np.dstack((RGB, np.zeros((h, w), dtype=np.uint8) + 255))

        # Make mask of black pixels - mask is True where image is black
        mBlack = (RGBA[:, :, 0:3] == [0, 0, 0]).all(2)

        # Make all pixels matched by mask into transparent ones
        RGBA[mBlack] = (0, 0, 0, 0)

        queryImg = RGBA

        result = cv2.warpPerspective(trainImg, H, (width, height), flags=cv2.INTER_NEAREST, borderMode=cv2.BORDER_CONSTANT)

        im = Image.fromarray(trim(result))


        result[0:queryImg.shape[0], 0:queryImg.shape[1]] = queryImg

        im = Image.fromarray(trim(result))
        im.save(feature_extractor+feature_matching+fnames_cropped[x]+fnames_cropped[y])

Tags: makeisnpmaskrgbcv2blackshape

热门问题