#include <stdio.h>
#include <stdlib.h>
#include<iostream>
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int main(void) {
//------------将图像文件生成.dat-------------------------
//jpg文件与dat文件一一对应
//int num_img = 291;
// for (int cont = 1; cont < num_img+1; cont++)
// {
// char fileName[1024] = "E:\\coke_dataset\\jpg\\";
// char output_name[1024] = "E:\\coke_dataset\\dat\\";
//
// char num[10];
// char dat[5] = ".dat";
// char jpg[5] = ".jpg";
// sprintf(num, "%04d",cont);
// strcat(fileName, num);
// strcat(fileName, jpg);
// //printf(fileName);
// Mat image = imread(fileName, IMREAD_GRAYSCALE);
// strcat(output_name, num);
// strcat(output_name, dat);
// //printf(output_name);
// FILE* fp = fopen(output_name, "wb");
// //fprintf(fp,"1651 9 80000000 0 40000 10\n");
// for (int i = 0; i < image.rows; i++) {
// for (int j = 0; j < image.cols; j++) {
// //写入数据
// fprintf(fp, "%x\n", (int)image.at<uchar>(i, j));
// }
// }
// printf("%d write done!!!\n", cont);
// fclose(fp);
// }
//多个jpg图片转为一个dat文件
int num_img = 10;
char output_name[1024] = "E:\\coke_dataset\\dat\\10.dat";
FILE* fp = fopen(output_name, "wb");
for (int cont = 1; cont < num_img + 1; cont++)
{
char fileName[1024] = "E:\\coke_dataset\\gray_jpg\\";
char num[10];
char jpg[5] = ".jpg";
sprintf(num, "%04d", cont);
strcat(fileName, num);
strcat(fileName, jpg);
//char fileName[1024] = "E:\\KCF工程汇总\\jpg2dat\\test.png";
//printf(fileName);
Mat image = imread(fileName, 0);
//fprintf(fp,"1651 9 80000000 0 4B000 10\n");
//原来是按行读取,matlab中将jpg转为txt时是按列读取
//for (int i = 0; i < image.rows; i++) {
// for (int j = 0; j < image.cols; j++) {
// //写入数据
// //fprintf(fp, "%x\n", (int)image.at<uchar>(i, j));
// fprintf(fp, "%d\n", (int)image.at<uchar>(i, j));
// }
//}
//改为按行读取
fprintf(fp,"1651 9 80000000 0 2EE000 10\n");
for (int i = 0; i < image.cols; i++) {
for (int j = 0; j < image.rows; j++) {
//写入数据
//fprintf(fp, "%x\n", (int)image.at<uchar>(i, j));
fprintf(fp, "%d\n", (int)image.at<uchar>(j, i));
}
}
printf("%d write done!!!\n", cont);
}
fclose(fp);
//unsigned char* im = (unsigned char*)0x80000000;
//for (int i = 0; i < 10; i++) {
// im = im + 307200;
// printf("%p\n", im);
//}
return 0;
}
C语言+opencv实现jpg、png等图片批量转为DSP可读取的.dat文件
于 2022-05-27 20:23:16 首次发布