在特定区域平滑图像

可能重复:
如何在OpenCV中设置ROI?

我正在尝试在图像上使用平滑/模糊滤镜,但只在源的特定path/区域中使用。 (目前使用openCV)

如何做到这一点?

现在我正在做类似的事情

cv::GaussianBlur(im, newim, cv::Size(5,5),1.5); 

但我想要做的

 cv::GaussianBlur(im, newim, cv::Size(5,5),1.5,MyClosedPath); 

如果它更容易做,我也可以使用任何ios类。 (还没find办法呢)

您可以从您的原始matrix中获得一个子matrix,例如:

 cv::Mat subMat = originalMatrix(cv::Rect(x, y, width, height)); 

其中x,y,宽度,高度是您的子图像的位置。 然后在子matrix上执行高斯模糊。

如果你想模糊复杂的形状,一种方法是模糊整个图像,然后使用mat.copyTo模糊部分的蒙版:

 cv::Mat mask = ?; // this should be a CV_8U image with 0 pixels everywhere but where you want to blur the original image cv::Mat blurred; cv::gaussianBlur(image, blurred, cv::Size(5,5),1.5); cv::Mat output = image.clone(); blurred.copyTo(output, mask);