У меня есть 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 выглядит следующим образом:
Результат после размытия выглядит следующим образом (минус верхняя граница, которая просто плохо обрезана):
Как можно избежать разноцветных краев и размытия с красивым переходом от черного к белому на края?
Большое спасибо