如何将多个(超过 4 个)`CV::Mat` 图像`Size(M, N), CV_8UC1` 加入到一个 RGBA 图像中?

Posted

技术标签:

【中文标题】如何将多个(超过 4 个)`CV::Mat` 图像`Size(M, N), CV_8UC1` 加入到一个 RGBA 图像中?【英文标题】:How to Join multiple (more than 4) `CV::Mat` images `Size(M, N), CV_8UC1` into one RGBA image? 【发布时间】:2011-11-15 21:28:02 【问题描述】:

所以我们创建了许多(比如100Mat::zeros(Size(100, 100), CV_8UC1); 二进制图像(值为 0 或 255)。我们用一些数据填充它们(可以覆盖在不同的图像上)。现在我们想将它们加入到一个可保存的 RGBA 图像中,每个 Mat 的所有数据都将由唯一的 RGB 值和 alpha == 0.5 表示。如何用 openCV 2 做这样的事情?

【问题讨论】:

【参考方案1】:

不幸的是,openCV 不支持 alpha 通道,我认为它的任何文件 I/O 库都不支持任何处理它的格式(例如 PNG)的透明度

“使用此功能只能保存 8 位(或在 PNG、JPEG 2000 和 TIFF 的情况下为 16 位)单通道或 3 通道(具有“BGR”通道顺序)图像”http://opencv.willowgarage.com/documentation/cpp/reading_and_writing_images_and_video.html#cv-imwrite

您可以使用 CV_8UC4 创建 4 通道图像格式并自己操作 alpha,但您无法使用 imread/imwrite 读取/写入它

【讨论】:

你说openCV不能创建透明的PNG例如?=(我在看this nice document但即使没有A通道仍然无法解决我的问题......( 是的,它向您展示了如何创建 4 通道图像并将其混合成单独的单通道图像(或者您可以将像素数据与指针结合起来),但您不能使用保存 RGBA写 顺便说一句,BGR 的签名是什么?我从 CV_8UC3 中得到了一些带有 .jpg 的非常糟糕的图像......( 图像格式中没有签名,该库只是假设您为它提供了 BGR,它会将您读取的任何内容转换为 int BGR

以上是关于如何将多个(超过 4 个)`CV::Mat` 图像`Size(M, N), CV_8UC1` 加入到一个 RGBA 图像中?的主要内容,如果未能解决你的问题,请参考以下文章

从 3d 数组创建 cv::Mat 图像

如何正确将 cv::Mat 转换为 CV_8UC1?

如何直接在boost共享内存中编写opencv cv :: Mat图像

合并多个cv::Mat类型,即合并多个图片的接口

如何将 cv::Mat 类型从 CV_16UC1 转换为 CV_8UC1

将 Magick::Image 转换为 cv::Mat