前言
一个项目中,给三维模型的贴图是彩色的,但是要实现红外的纹理贴图,首先第一步是将彩色的转换成灰度,但是对于FBX格式文件,是如何从文件夹下读取不同部件的贴图,已经贴图的不同LOD级别,还没有搞清楚,那么一个简单的方法是将文件下所有彩色图像转换吃灰度图像,实验结果表明,可以实现功能。详见:https://www.jianshu.com/p/0ff36b8daa38
代码
void RGBtoGray()
{
string file_path = "E:\\vincen\\OSG\\原始资料\\数据资料\\启明模型\\Models\\AirCraft\\FixedWing\\E-737\\";//需要转换的备用图像所在文件夹路径
string search_path = file_path + "*.jpg";//确定指定格式的图像
vector<cv::String> file_list;
vector<Mat> images;
glob(search_path, file_list, false);
Mat src,OutMat;
for (size_t i = 0; i < file_list.size();i++)
{
string PicFile = file_list[i];
src = cv::imread(PicFile);
cv::cvtColor(src, src, CV_BGR2GRAY);//彩色转灰度
vector<Mat> vHls;
vHls.push_back(src);
vHls.push_back(src);
vHls.push_back(src);
merge(vHls, OutMat);//输出要求依然是三通道,所以,构建一个三通道都是灰度图像的新图像
int pos = PicFile.find_last_of('\\');//输出文件名称与原来文件名称相同,确保在此复制到原来文件夹下时,还可以直接使用
string s(PicFile.substr(pos + 1));
cout << s << endl;
imwrite(s, OutMat);//写入到当前项目目录下
}
}
结论
实验结果表明可以使用。在osg中显示出来灰度的模型。