Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ opencv将一个图像覆盖在另一个图像上,并进行遮罩和绘制_C++_Opencv_Image Processing_Image Manipulation_Image Masking - Fatal编程技术网

C++ opencv将一个图像覆盖在另一个图像上,并进行遮罩和绘制

C++ opencv将一个图像覆盖在另一个图像上,并进行遮罩和绘制,c++,opencv,image-processing,image-manipulation,image-masking,C++,Opencv,Image Processing,Image Manipulation,Image Masking,我正在使用OpenCV在一些多边形上进行绘制(在纸上绘制,参见示例) 一些图例规格: 绿色框架用于绘制场景“边界”,仅供参考 蓝色球漂浮在场景上,当球撞击多边形时,场景将使用适当的遮罩重新渲染,就像球压碎对象一样 这里有一个代码供参考,假设inpaintedScene、transformedScene和outputFrame是cv::Mat: cv::Mat mask_image(outputFrame.size(),cv_8U,黑色); std::vector destroyedPolyg

我正在使用OpenCV在一些多边形上进行绘制(在纸上绘制,参见示例)

一些图例规格:

  • 绿色框架用于绘制场景“边界”,仅供参考
  • 蓝色球漂浮在场景上,当球撞击多边形时,场景将使用适当的遮罩重新渲染,就像球压碎对象一样
这里有一个代码供参考,假设
inpaintedScene
transformedScene
outputFrame
cv::Mat

cv::Mat mask_image(outputFrame.size(),cv_8U,黑色);
std::vector destroyedPolygons=//一些被球击中的子多边形
std::vector DestroytedPolygonSpointCount=//每个已销毁多边形的点数
对于(int i=0;i
这些结果对我来说都不好:

选项1(+=)的结果:

这对我来说不好,因为我在被破坏的多边形上获得了透明度

第2项选择(复制)的结果:

这也是不好的,因为正如你所看到的,多边形被破坏的部分是一种黑色的“边界”或“框架”(即使多边形是另一种颜色)-什么能解决这个问题呢?

找到了

我已使用“最近邻”插值将
warpPerspective
添加到
transformedScene

cv::warpPerspective(transformedScene, transformedScene, warpImageMat, outputFrame.size(), CV_INTER_NN);
其中
warpmagemat
cv::Mat

阅读有关OpenCV的功能的更多信息


干杯

需要注意的是,
透视图
可能会在变换后的像素落在几个像素之间的边界上时进行插值
CV_INTER_NN
采用最近邻,而其他人则对相邻像素进行插值,因此可能最终得到“意外”值。