使用OpenCV和Python对多边形应用高斯模糊

使用OpenCV和Python对多边形应用高斯模糊,python,opencv,image-processing,gaussianblur,Python,Opencv,Image Processing,Gaussianblur,我对OpenCV和Python非常陌生。我需要对使用cv2.findContours获得的轮廓应用高斯模糊。我已经成功地应用了高斯模糊,但仅限于矩形。我找不到任何例子来说明如何将其应用于随机形状的轮廓 我使用的是OpenCV版本3.1.0 谢谢 > P>你可以考虑到处模糊图像,然后在模糊图像和原始图像之间取加权平均,其中权重是轮廓区域内的一个,而0外: outImg = img.mul(contourMask) + blurredImg.mul(1-contourMask); 或者,使用cop

我对OpenCV和Python非常陌生。我需要对使用cv2.findContours获得的轮廓应用高斯模糊。我已经成功地应用了高斯模糊,但仅限于矩形。我找不到任何例子来说明如何将其应用于随机形状的轮廓

我使用的是OpenCV版本3.1.0


谢谢

> P>你可以考虑到处模糊图像,然后在模糊图像和原始图像之间取加权平均,其中权重是轮廓区域内的一个,而0外:

outImg = img.mul(contourMask) + blurredImg.mul(1-contourMask);
或者,使用copyTo:

outImg = img.clone();
blurredImg.copyTo(outImg,contourMask);

我也有同样的问题,下面是一个对我有效的解决方案(它适用于任何轮廓):

这里我定义了一个示例多边形ROI的顶点列表:

roi_corners = np.array([[(180,300),(120,540),(110,480),(160,350)]],dtype = np.int32)
阅读原始图像:

image = cv.imread('image.jpeg')
创建整个图像的模糊副本:

blurred_image = cv.GaussianBlur(image,(43, 43), 30)
为ROI创建遮罩,并用(255255)颜色填充ROI:

为原始图像中除ROI之外的所有位置创建遮罩(因此遮罩逆):

按以下方式组合所有遮罩和以上图像:

final_image = cv.bitwise_and(blurred_image, mask) + cv.bitwise_and(image, mask_inverse)
下面是一个原始图像的示例,其中ROI是倾斜的车牌(平行四边形):

以及生成的图像:


嘿,谢谢你的回答!我问这个问题已经两年了,我终于找到了解决办法,但是我忘了把它贴在这里。将检查您的解决方案,如果有效,将其作为答案接受。
mask = np.zeros(image.shape, dtype=np.uint8)
channel_count = image.shape[2]
ignore_mask_color = (255,)*channel_count
cv.fillPoly(mask, roi_corners, ignore_mask_color)
mask_inverse = np.ones(mask.shape).astype(np.uint8)*255 - mask
final_image = cv.bitwise_and(blurred_image, mask) + cv.bitwise_and(image, mask_inverse)