从图像中提取区域

问题描述 投票:0回答:1

[嗨,我正在尝试从一组图像中检索区域。我在图像和遮罩上使用bitwise_and操作来获取区域,但是这样做会导致结果图像的亮度发生变化。因此,我想逐个像素地从图像中检索这些区域,并将它们放到另一个空白图像中。

更新:当前,我在蒙版中有三个区域(白色,灰色和黑色)。我希望能够选择一个区域(例如白色或灰色),然后为该特定区域提取对应区域的图像。

for im in glob.glob(path_to_images):
        image = cv2.imread(im)  

        canny = auto_canny(image)


        image[(image< 50)] = 0
        gray_mask = image[(image>= 50) & (image< 100)] = 100
        white_mask = image[image> 110] = 255



        if(white_mask):
            res = cv2.bitwise_and(img, img, mask = white_mask )
            white_inv= cv2.bitwise_not(white_mask)
            alt_ = cv2.bitwise_and(img_1, img_1, mask = white_inv)
            result = cv2.add(alt_, res)

        elif(gray_mask):
            res = cv2.bitwise_and(img, img, mask = gray_mask )
            gray_inv= cv2.bitwise_not(gray_mask)
            alt_ = cv2.bitwise_and(img_1, img_1, mask = gray_inv)
            result = cv2.add(alt_, res)





        cv2.imshow("result",result)
        cv2.waitKey(0)





我已经尝试过,但是提取的区域会增加亮度。

Update 2:我尝试了@ZdaR给出的解决方案,但收到以下错误:“错误:(-215)(mtype == 0 || mtype == 1)&& _mask.sameSize(* psrc1 )在函数cv :: binary_op“

Link to sample images

Expected output

My output

Masks

python numpy opencv image-processing
1个回答
0
投票

[第一步将使用cv2.thresholdcv2.inRange()方法独立地分离出灰色和白色蒙版,然后我们可以简单地使用cv2.min()方法分别将原始图像在灰色和白色区域上的印记作为:

import cv2
import numpy as np


def extract_gray_mask(input_image, composite_mask):
    gray_mask = cv2.inRange(composite_mask, np.array([100]), np.array([120]))
    gray_mask = cv2.cvtColor(gray_mask, cv2.COLOR_GRAY2BGR)

    return cv2.min(input_image, gray_mask)


def extract_white_mask(input_image, composite_mask):
    white_mask = cv2.inRange(composite_mask, np.array([250]), np.array([255]))
    white_mask = cv2.cvtColor(white_mask, cv2.COLOR_GRAY2BGR)

    return cv2.min(input_image, white_mask)


input_image = cv2.imread("/path/to/original_img.png")
composite_mask = cv2.imread("/path/to/mask.png", 0)

img_1 = extract_gray_mask(input_image, composite_mask)
img_2 = extract_white_mask(input_image, composite_mask)

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.