问题遇到的现象和发生背景
将一个yuv文件的y分量做直方图均衡化一直出现这个问题,输出的文件没有任何改变,求大lao指点
C6385 正在从t中读取无效数据
用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
int main(void)
{
int width = 500; // 图片的宽度
int height = 500; // 图片的高度
int len = 250000; // 文件大小
double nk[256]={0};//存放灰度值出现次数
double p[256] = { 0 };//存放概率值
double s[256]={0};//存放累加概率
int t[256] = { 0 }; //归一化
FILE* fin;
fin = fopen("D:\\03\\video\\sucai\\seed.yuv", "rb");
if (NULL == fin)
{
perror("open file is failed\n");
return -2;
}
int len1 = 3 * len;
unsigned char* buff = new unsigned char[len1];
if (NULL == buff)
{
fprintf(stderr, "malloc data failed\n");
fclose(fin);
return -3;
}
unsigned char* data = new unsigned char[len1];
if (NULL == buff)
{
fprintf(stderr, "malloc data failed\n");
fclose(fin);
return -4;
}
fread(buff, 1, len1, fin);
fclose(fin);
memcpy(data, buff, len1);//内存复制
for (int i = 0; i < len; i++) //求每个灰度级出现的次数
{
if(buff[i]>=0&&buff[i]<=256)
nk[buff[i]]++;
}
for (int i = 0; i < 256; i++) //求概率值
{
p[i] = nk[i] / len;
}
for (int i = 0; i < 256; i++) //求累加概率
{
s[i] = s[i] + p[i];
}
for (int i = 0; i < 256; i++)//映射
{
t[i] =(int)( 255 * s[i] + 0.5);
}
for (int i = 0; i < 256; i++)
{
buff[i] = t[buff[i]];
}
for (int i = 0; i < len; i++)
{
if (buff[i] >= 0 && buff[i] < 256)
data[i] =buff[i];
}
//u\v
for (int i = 0; i >len&&i<len*3; i++)
buff[i] = 128;
FILE* fout;
fout = fopen("D:\\03\\video\\sucai\\0seed.yuv", "wb+");
if (NULL == fout)
{
perror("open file is failed\n");
return -2;
}
else
{
fwrite(data, 1, len1, fout);
fflush(fout);
fclose(fout);
}
//free(buff);
//free(data);
return 0;
}