计算YUV图像的PSNR遇到的编译问题
如下是我的C源码:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define FRAME_NUM 50
//#define HAN_SOURCEDATA_Y (1280*720) //
//#define HAN_SOURCEDATA_UV (1280*720/2)//1382400
#define HAN_SOURCEDATA_Y (720*480) //
#define HAN_SOURCEDATA_UV (720*480/2) //1382400
#define HAN_DSTDATA_Y (720*480)
#define HAN_DSTDATA_UV (720*480/2) //345600
//PSNR=10lg(2^n-1)^2/MSE mse?????????????????????????
float psnr(unsigned char* p1, unsigned char* p2, int size)
{
float sad = 0;
int i;
for (i = 0; i < size; i++)
{
int tmp;
tmp = (p1[i] - p2[i]);
sad += tmp * tmp;
}
return (float)(10 * log10(65025.0f * size / sad));
}
void main()
{
FILE *hfile1 = NULL;
FILE *hfile2 = NULL;
char *src1, *src2;
unsigned int hreadnum1 = 0, hreadnum2 = 0, i = 0;
float y = 0.0, u = 0.0, v = 0.0;
float fy = 0.0, fu = 0.0, fv = 0.0;
src1 = malloc(HAN_SOURCEDATA_Y + HAN_SOURCEDATA_UV);
src2 = malloc(HAN_DSTDATA_Y + HAN_DSTDATA_UV);
hfile1 = fopen("C://Users//Administrator//Desktop//mirror_test_symmetric_0720x0480_1.yuv", "rb");
hfile2 = fopen("C://Users//Administrator//Desktop//mirror_test_symmetric_0720x0480_2.yuv", "rb");
for (i = 0; i<FRAME_NUM; i++)
{
//fseek(hfile1,hreadnum1,SEEK_SET);//?????????????
hreadnum1 += fread(src1, 1, HAN_SOURCEDATA_Y + HAN_SOURCEDATA_UV, hfile1);
if (hreadnum1 != ((HAN_SOURCEDATA_Y + HAN_SOURCEDATA_UV)*(i + 1)))
printf("read num=%d\n", hreadnum1);
//fseek(hfile2,hreadnum2,SEEK_SET);
hreadnum2 += fread(src2, 1, HAN_SOURCEDATA_Y + HAN_SOURCEDATA_UV, hfile2);
if (hreadnum2 != ((HAN_SOURCEDATA_Y + HAN_SOURCEDATA_UV)*(i + 1)))
printf("read num=%d\n", hreadnum2);
memcpy(src1, hfile1, HAN_SOURCEDATA_Y + HAN_SOURCEDATA_UV);
memcpy(src2, hfile2, HAN_DSTDATA_Y + HAN_DSTDATA_UV);
fy += psnr(src1, src2, HAN_SOURCEDATA_Y);
fu += psnr(src1 + HAN_SOURCEDATA_Y, src2 + HAN_SOURCEDATA_Y, HAN_SOURCEDATA_UV / 2);
fv += psnr(src1 + HAN_SOURCEDATA_Y + HAN_SOURCEDATA_UV / 2, src2 + HAN_SOURCEDATA_Y + HAN_SOURCEDATA_UV / 2, HAN_SOURCEDATA_UV / 2);
}
printf(" average psnr of y is =%.2f\n", fy / FRAME_NUM);
printf(" average psnr of U is =%.2f\n", fu / FRAME_NUM);
printf(" average psnr of V is =%.2f\n", fv / FRAME_NUM);
fclose(hfile1);
fclose(hfile2);
free(src1);
free(src2);
}
在编译的时候弹出对话框:ConsoleApplication4.exe, 其他没有错误,有大神可以帮忙看下code里面哪里了出错了吗?