OpenCV наложение одного изображения на другое с маскировкой и рисованием

Я использую OpenCV для рисования на нескольких полигонах (нарисовано на бумаге, см. Примеры).

Некоторые характеристики легенды:

  • Зеленая рамка предназначена для рисования «границ» сцены, просто для справки.
  • Синий шар плавает на сцене, и когда мяч попадает в многоугольник, сцена перерисовывается с надлежащей маскировкой, как если бы мяч раздавливал объекты.

Вот код для справки, предположим, что inpaintedScene, transformedScene а также outputFrame являются cv::Mat:

 cv::Mat mask_image(outputFrame.size(), CV_8U, BLACK_COLOR);
std::vector<cv::Point*> destroyedPolygons = //some sub-polygons that has been hit by the ball
std::vector<int> destroyedPolygonsPointCount = //points count for each destroyed polygon
for (int i = 0; i < destroyedPolygons.size(); i++)
{
const cv::Point* ppt[1] = { destroyedPolygons[i] };
int npt[] = { destroyedPolygonsPointCount[i] };
cv::fillPoly(mask_image, ppt, npt, 1, WHITE_COLOR);
}

// now that the mask is prepared, copy the points from the inpainted to the scene
inpaintedScene.copyTo(transformedScene, mask_image);

// here I have two options:
//option 1
outputFrame += transformedScene;

//option 2
transformedScene.copyTo(outputFrame, transformedScene);

Вот результаты, которые ни один из них не подходит для меня:

Результаты варианта № 1 (+ =):

введите описание изображения здесь

Это не хорошо для меня, так как я получаю прозрачность по разрушенным полигонам.

Результаты варианта № 2 (copyTo):

введите описание изображения здесь

Это также не очень хорошо, потому что, как вы можете видеть, разрушенная часть многоугольника имеет вид «окаймленный» или «обрамленный» черным цветом (даже если многоугольник другого цвета) — что может решить это?

2

Решение

Нашел это!

я добавил warpPerspective в transformedScene с интерполяцией «ближайший сосед»:

cv::warpPerspective(transformedScene, transformedScene, warpImageMat, outputFrame.size(), CV_INTER_NN);

где warpImageMat это тип cv::Mat

Читать Вот больше о warpPerspective функция OpenCV

Ура!

1

Другие решения


По вопросам рекламы [email protected]