【问题标题】:Any solution for TGA format loading in OpenCV4在 OpenCV4 中加载 TGA 格式的任何解决方案
【发布时间】:2020-12-28 00:33:00
【问题描述】:

OpenCV 目前不支持 TGA 格式。

我知道有一个名为stb_image 的头文件库允许您读取/写入TGA 图像。 但是互联网上使用 OpenCV 的用例实在是太少了。 (经常看到人们将它与 OpenGL 一起使用)

我找到的第二种方法。 本主题中包含一个短代码(答案): Loading a tga/bmp file in C++/OpenGL

有人使用此代码将 TGA 文件读入 cv::Mat,就像下面的代码一样。

Tga tgaImg = Tga("/tmp/test.tga");
Mat img(tgaImg.GetHeight(), tgaImg.GetWidth(), CV_8UC4);
memcpy(img.data, tgaImg.GetPixels().data(), tgaImg.GetHeight() * tgaImg.GetWidth() * 4);

但这仅用于阅读部分。我想知道 stb_image 是否可以像上面的代码一样做同样的事情。我的意思是图像数据结构可能不同。 (还没有调查)

我想问问以前也有过这种经历的人。由于 DDS/TGA 图像格式在游戏纹理中也很流行,所以肯定有人已经找到了方法。我的意思是在 OpenCV 代码中读/写 TGA 格式。

谢谢。

【问题讨论】:

  • 要在 tga 中保存 opencv 图像,请使用 stbi_write_tga。该函数将指向图像数据的指针作为参数,在 cv::Mat 类型的情况下为 img.data。
  • @Hihikomori 好的,马上试试。谢谢。
  • @Hihikomori stbi_write_tga("export.tga", img.size().width, img.size().height, 0, img.data);对?导出的文件很小,无法查看...奇怪。代码本身运行没有错误。
  • @Hihikomori 它有效,我认为第四个参数是 RLE 标志。它实际上是通道数量。并在我将其修改为 4 后很好地导出。只需要一些 BGR 到 RGB 修复。你会把它作为答案发布吗?我想把你设为答案。再次感谢!

标签: opencv tga stb-image


【解决方案1】:

要在 tga 中保存 opencv 图像,请使用 stbi_write_tga。该函数将指向图像数据的指针作为参数,在 cv::Mat 类型的情况下为 img.data。

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2021-05-04
    • 2015-10-25
    • 1970-01-01
    • 2019-05-27
    • 2014-02-27
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多