2016-03-04 4 views
1

Я использую OpenCV3 стираться и декодирует изображение, я просто хочу, чтобы размыть область внутри области, определенной бинарной маской, как:Размытия непрямоугольной области изображения, а затем декодирует все изображение - OpenCV

enter image description here

После того, как регион размыт, я хотел бы уменьшить изображение без размытия всего изображения, так что pyrDown не подходит для меня.

Любая идея?

ответ

1

Хитрый способ:

cv::Mat roi; 
cv::blur(image & mask,roi,cv::Size(3,3));//Or whatever blurring you want 
cv::Mat Result=(image & (~mask)) + roi; 
cv::resize(result,result,cv::Size(New_Width,New_height)); // Or whatever downsampling you want 
+0

Это хорошее и хитрое решение для черно-белых изображений, однако, решение не работает, если 'image' является матрицей 3-канальной, и' mask' двоичным (один -канальная). – Finfa811

+0

Работы на 3-канальном. просто добавьте это: cv :: cvtColor (маска, маска, cv :: Gray2BGR); перед приведенным выше кодом –

+0

Я клонировал двоичную маску в 3-канальное изображение, проблема заключалась в различной точности значений в матрицах ... Моя ошибка, теперь это работает, спасибо. – Finfa811

 Смежные вопросы

  • Нет связанных вопросов^_^