2012-10-08 82 views
2

可能重复:
How to set ROI in OpenCV?平滑图像的特定区域

我想要的图像上,但只能在特定的路径/区域使用平滑/模糊滤镜的来源。 (目前使用openCV)

这怎么做?

我现在正在做这样的事情

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

但我想在做

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

我也可以使用任何的ios类的,如果它是更容易做到。 (还没有找到一种方式为尚未要么)

+0

设置一个ROI(感兴趣的区域),然后将其复制到另一个垫子,平滑它,并将其复制回原始垫子。 – karlphillip

回答

4

你可以得到一个小矩阵你原有的矩阵例如:

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

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

[编辑] 如果要模糊复杂的形状,一个办法是模糊的完整图像,然后用你的模糊部分的面膜使用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); 
+0

我需要做一些更复杂的形状(以及“洞”) - 我如何将它们结合回一个图像? –

+0

在子矩阵中进行的任何更改也适用于您的原始矩阵。我将编辑你的第二个问题我的答案 – remi

+0

让我知道如果通过标记回答你的问题!谢谢 – remi