#include "ekd_cv.h" void read_bmp(char* filename, uint8_t** data) { bmp_header_t header; bmp_info_t info; FILE* file = fopen(filename, "rb"); if (file == NULL) { printf("Unable to open file.\n"); return; } fread(&header.signature, sizeof(uint16_t), 1, file); fread(&header.file_size, sizeof(uint32_t), 1, file); fread(&header.reserved, sizeof(uint32_t), 1, file); fread(&header.data_offset, sizeof(uint32_t), 1, file); fread(&info.size, sizeof(uint32_t), 1, file); fread(&info.width, sizeof(uint32_t), 1, file); fread(&info.height, sizeof(uint32_t), 1, file); fread(&info.planes, sizeof(uint16_t), 1, file); fread(&info.bit_depth, sizeof(uint16_t), 1, file); fread(&info.compression, sizeof(uint32_t), 1, file); fread(&info.image_size, sizeof(uint32_t), 1, file); fread(&info.x_pixels_per_meter, sizeof(uint32_t), 1, file); fread(&info.y_pixels_per_meter, sizeof(uint32_t), 1, file); fread(&info.colours_used, sizeof(uint32_t), 1, file); fread(&info.important_colours, sizeof(uint32_t), 1, file); uint8_t* raw_data = (uint8_t*) malloc(info.width * info.height * sizeof(uint8_t)); fseek(file, header.data_offset, SEEK_SET); fread(raw_data, sizeof(uint8_t), info.width * info.height, file); fclose(file); for (uint8_t i=0; id_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { continue; } strcat(file_name_arr[item_id], entry->d_name); item_id++; } while ((entry = readdir(dpos_dir)) != NULL) { if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { continue; } strcat(file_name_arr[item_id], entry->d_name); item_id++; } closedir(dneg_dir); closedir(dpos_dir); } void flatten_image(uint8_t** image, float* image_flattened) { for (uint8_t i=0; i 0; i--) { // Generate a random index between 0 and i (inclusive) int j = rand() % (i + 1); // Swap the rows of data_flatten and labels at indices i and j float* temp_data = data[i]; data[i] = data[j]; data[j] = temp_data; int32_t temp_label = labels[i]; labels[i] = labels[j]; labels[j] = temp_label; } }