C++ opencv将一个图像覆盖在另一个图像上,并进行遮罩和绘制
我正在使用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
- 绿色框架用于绘制场景“边界”,仅供参考
- 蓝色球漂浮在场景上,当球撞击多边形时,场景将使用适当的遮罩重新渲染,就像球压碎对象一样
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
采用最近邻,而其他人则对相邻像素进行插值,因此可能最终得到“意外”值。