Размытие черно-белой матрицы с размытием () приводит к красочным краям - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть cv :: Mat, который заполнен единицами и нулями. Это простой изогнутый черный путь на белом фоне. Я хочу размывать изображение, используя cv :: blur, следующим образом:

cv::Mat result;

cv::blur(curvePath, result, cv::Size(10, 10));

Изогнутый путь строится следующим образом: completeBandPath является экземпляром cinder :: Path2d, который охватывает область, которая должна быть черной (или нули):

Rectf bb = completeBandPath.calcPreciseBoundingBox();

const int matHeight = static_cast<int>(bb.getHeight());
const int matWidth = static_cast<int>(bb.getWidth());

cv::Mat curvePath = cv::Mat(matHeight, matWidth, CV_32F, 1);

for (int i = 0; i < matWidth; i++) {
    for (int j = 0; j < matHeight; j++) {
        if (completeBandPath.contains(vec2( i+bb.getUpperLeft().x, j+bb.getUpperLeft().y ))) {
            curvePath.at<float>(j, i) = 0;
        }
    }
}

curvePath выглядит следующим образом:

curvedPath without blur

Результат после размытия выглядит следующим образом (минус верхняя граница, которая просто плохо обрезана):

curvedPath with blur

Как можно избежать разноцветных краев и размытия с красивым переходом от черного к белому на края?

Большое спасибо

...