2012-10-08 81 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