Это очень простой вопрос, но я не смог найти ответ на него.Функция для чтения файла с общим типом данных
У меня есть функция, которая читает (двоичный) файл и передает содержимое в изображение openCV. В настоящее время файл всегда имеет тип данных «unsigned char», но я хотел бы расширить поддержку других типов данных. Предпочтительно как аргумент функции.
Я не очень опытен с C++, но после того, как поиск в нем походит на что-то, что должно быть сделано с помощью шаблонов, но я действительно не уверен, как его реализовать.
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;
}
нет 'double' в этом коде, или я что-то отсутствует? – user463035818
Не могли бы вы привести пример того, что уже работает (входной файл и вывод), и что бы вы хотели выполнить? – bitcell
@ tobi303 Нет, я вставил неправильный код :) Этот файл читает файл без знака. Я перефразирую вопрос в соответствии с кодом, но идея все та же. Я хочу, чтобы функция могла читать файлы с различными типами данных. – Markus