模糊图像的特定部分
Posted
技术标签:
【中文标题】模糊图像的特定部分【英文标题】:Blur a specific part of an image 【发布时间】:2019-02-21 05:27:57 【问题描述】:我有一张图片。像这样:
我检测到一个主题(在这种情况下是一个人),它像这样掩盖图像:
我希望主体的背景模糊。像这样:
以下是我尝试过的代码。下面的代码只是模糊了
import cv2
import numpy as np
from matplotlib import pyplot as plt
import os
path = 'selfies\\'
selfImgs = os.listdir(path)
for image in selfImgs:
img = cv2.imread(path+image)
img=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
blur = cv2.blur(img,(10,10))
#canny = cv2.Canny(blur, 10, 30)
#plt.imshow(canny)
plt.imshow(blur)
j=cv2.cvtColor(blur, cv2.COLOR_BGR2RGB)
print(image)
cv2.imwrite('blurred\\'+image+".jpg",j)
有什么方法可以只/部分。
本项目基于https://github.com/matterport/Mask_RCNN
如果需要,我可以提供更多信息。
我在 numpy 中有一个方法:-
final_image = original * mask + blurred * (1-mask)
【问题讨论】:
你要做的是模糊整个图像,然后根据掩码将原始图像和模糊图像组合起来(例如,参见this question)。 【参考方案1】:正如ZdaR
所说:
import cv2
import numpy as np
img = cv2.imread("/home/user/Downloads/lena.png")
blurred_img = cv2.GaussianBlur(img, (21, 21), 0)
mask = np.zeros((512, 512, 3), dtype=np.uint8)
mask = cv2.circle(mask, (258, 258), 100, np.array([255, 255, 255]), -1)
out = np.where(mask==np.array([255, 255, 255]), img, blurred_img)
cv2.imwrite("./out.png", out)
这是个好主意,但我遇到了与 penta
相同的错误:
@ZdaR 我得到 TypeError: Scalar value for argument 'color' is not numeric
简单的解决方案是在创建 Circle 时修改颜色值:
mask = cv2.circle(mask, (258, 258), 100, (255, 255,255), -1)
只需将np,array([255,255,255])
更改为(255,255,255)
。
【讨论】:
【参考方案2】:您可以使用np.where()
方法选择您想要模糊值的像素,然后将它们替换为:
import cv2
import numpy as np
img = cv2.imread("/home/user/Downloads/lena.png")
blurred_img = cv2.GaussianBlur(img, (21, 21), 0)
mask = np.zeros((512, 512, 3), dtype=np.uint8)
mask = cv2.circle(mask, (258, 258), 100, np.array([255, 255, 255]), -1)
out = np.where(mask==np.array([255, 255, 255]), img, blurred_img)
cv2.imwrite("./out.png", out)
【讨论】:
没错。使用掩码是最常见和最有效的方式。 @ZdaR 我得到 TypeError: Scalar value for argument 'color' is not numeric 在哪一行代码,也许你安装了一些不同版本的 OpenCV,代码可能需要微调。你能分享完整的回溯吗? @ZdaR,就我而言,我需要在全球范围内将np.array([255, 255, 255])
替换为(255, 255, 255)
。使用 opencv-python==4.1.0.25.以上是关于模糊图像的特定部分的主要内容,如果未能解决你的问题,请参考以下文章