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以外的所有内容都将非常感谢。