C++ 函数读取泛型数据类型的文件
这感觉像是一个非常简单的问题,但我还没有找到答案 我有一个函数,它读取二进制文件并将内容输入到openCV图像中。目前,该文件始终为unsigned char数据类型,但我希望扩展对其他数据类型的支持。最好作为函数的参数 <>我对C++很有经验,但是在Google环绕之后,感觉好像应该用模板来做,但是我真的不知道如何实现它。C++ 函数读取泛型数据类型的文件,c++,opencv,templates,generics,types,C++,Opencv,Templates,Generics,Types,这感觉像是一个非常简单的问题,但我还没有找到答案 我有一个函数,它读取二进制文件并将内容输入到openCV图像中。目前,该文件始终为unsigned char数据类型,但我希望扩展对其他数据类型的支持。最好作为函数的参数 我对C++很有经验,但是在Google环绕之后,感觉好像应该用模板来做,但是我真的不知道如何实现它。 cv::Mat ReadImage(const char * filename, int dataTypeSize, int imageWidth) { auto re
cv::Mat ReadImage(const char * filename, int dataTypeSize, int imageWidth)
{
auto read_image = fopen(filename, "rb");
if (read_image == nullptr)
{
printf("Image Not Found\n");
return cv::Mat();
}
fseek(read_image, 0, SEEK_END);
int fileLen = ftell(read_image);
fseek(read_image, 0, SEEK_SET);
auto pre_image = static_cast<unsigned char *>(malloc(fileLen));
auto data = fread(pre_image, 1, fileLen, read_image);
// Printed and verify the values
//printf("File Size %d\n", fileLen);
//printf("Read bytes %zd\n", data);
auto width = imageWidth;
auto height = fileLen / dataTypeSize / imageWidth;
fclose(read_image);
vector<unsigned char> buffer(pre_image, pre_image + data);
auto img = cv::Mat(height, width, CV_64F, pre_image);
//printf("Image rows %d\n", img.rows);
//printf("Image cols %d\n", img.cols);
return img;
}
cv::Mat不是模板类。只需向当前硬编码为cv_64F的构造函数提供不同的类型参数,就可以构造不同的cv::Mat
像这样:
cv::Mat ReadImage(const char * filename, int dataTypeSize, int imageWidth, int type)
{
. . .
auto img = cv::Mat(height, width, type, pre_image);
return img;
}
auto mat = ReadImage("abc", 8, 1000, CV_32S);
该代码中没有double,或者我遗漏了什么?您可以发布一个示例,说明输入文件和输出已经在工作,您希望实现什么吗?@tobi303不,我粘贴了错误的代码:这个代码读取一个未签名字符的文件。我将重新措辞这个问题,使之与代码相匹配,但想法仍然是一样的。我希望该函数能够读取各种类型的文件datatypes@tobi303我假设cv::Mat和/或cv_64F与问题相关。请查看重复cv_64S中的函数matread不存在。您可以将CV_32S作为示例。此外,这不考虑具有超过1个通道的图像,但这是OP的错误。