问题描述
目前不支持 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。