Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 移除图像圆形区域外的颜色_Python 3.x_Opencv_Image Processing - Fatal编程技术网

Python 3.x 移除图像圆形区域外的颜色

Python 3.x 移除图像圆形区域外的颜色,python-3.x,opencv,image-processing,Python 3.x,Opencv,Image Processing,我使用以下代码执行两项任务: 修剪圆形眼睛 应用高斯滤波器 例如:当输入图像为: 下面的代码生成: 正如你所看到的,在圆形眼睛之外还有一个灰色区域。我不知道如何去除它或将它变成白色而不是灰色。感谢您的帮助 import cv2 import numpy as np def crop_from_gray(img): img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) img_mask = img_gray > 5

我使用以下代码执行两项任务:

  • 修剪圆形眼睛
  • 应用高斯滤波器
  • 例如:当输入图像为:

    下面的代码生成:

    正如你所看到的,在圆形眼睛之外还有一个灰色区域。我不知道如何去除它或将它变成白色而不是灰色。感谢您的帮助

    import cv2
    import numpy as np
    
    
    def crop_from_gray(img):
        img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
        img_mask = img_gray > 5
        check_shape = img[:, :, 0][np.ix_(img_mask.any(1), img_mask.any(0))].shape[0]
        if check_shape == 0:
            # Image is too dark, just return to crop everything
            return img
        else:
            i1 = img[:, :, 0][np.ix_(img_mask.any(1), img_mask.any(0))]
            i2 = img[:, :, 1][np.ix_(img_mask.any(1), img_mask.any(0))]
            i3 = img[:, :, 2][np.ix_(img_mask.any(1), img_mask.any(0))]
            img = np.stack([i1, i2, i3], axis=-1)
        return img
    
    
    def crop_filter(img, sigma):
        img = crop_from_gray(img)
        height, width, depth = img.shape
        x = int(width / 2)
        y = int(height / 2)
        r = np.amin((x, y))
    
        cir_img = np.zeros((height, width), np.uint8)
        cv2.circle(cir_img, (x, y), int(r), 1, thickness=-1)
        img = cv2.bitwise_and(img, img, mask=cir_img)
        img = crop_from_gray(img)
    
        # Filtering
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        gau = cv2.GaussianBlur(img, (0, 0), sigma)
        img = cv2.addWeighted(img, 4, gau, -4, 128)
        return img
    
    
    img = cv2.imread('path/to/image')
    img = crop_filter(img, 40)  # Crop and apply filter
    img = cv2.resize(img, (128, 128))  # resize
    cv2.imwrite('output_filepath', img)
    

    使用您的原始图像执行此任务,因为它是黑色且可分辨的。使用非常低的阈值应用
    cv2.thresholding
    ,并使用
    cv2.threshold\u BINARY\u INV
    执行此操作

    这样,在原始图像中,要转换为白色的区域将是白色的,而要保持不变的区域将是黑色的。现在在它们之间应用
    cv2.biwise\u或
    ,这样就可以了


    如果您无法完成,请告诉我,我将编写完整的代码。

    您已经有了一个掩码。设置为0(或其他任何值),如果您编写反映您想法的代码,maskI以外的所有内容都将非常感谢。