我想要的图像上,但只能在特定的路径/区域使用平滑/模糊滤镜的来源。 (目前使用openCV)
这怎么做?
我现在正在做这样的事情
cv::GaussianBlur(im, newim, cv::Size(5,5),1.5);
但我想在做
cv::GaussianBlur(im, newim, cv::Size(5,5),1.5,MyClosedPath);
我也可以使用任何的ios类的,如果它是更容易做到。 (还没有找到一种方式为尚未要么)
我想要的图像上,但只能在特定的路径/区域使用平滑/模糊滤镜的来源。 (目前使用openCV)
这怎么做?
我现在正在做这样的事情
cv::GaussianBlur(im, newim, cv::Size(5,5),1.5);
但我想在做
cv::GaussianBlur(im, newim, cv::Size(5,5),1.5,MyClosedPath);
我也可以使用任何的ios类的,如果它是更容易做到。 (还没有找到一种方式为尚未要么)
你可以得到一个小矩阵你原有的矩阵例如:
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);
设置一个ROI(感兴趣的区域),然后将其复制到另一个垫子,平滑它,并将其复制回原始垫子。 – karlphillip