计算YUV图像的PSNR遇到的编译问题

weixin_37642204 2018-11-02 12:13:26
如下是我的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里面哪里了出错了吗?



...全文
101 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
英雄@末路 2018-11-02
  • 打赏
  • 举报
回复
memcpy(src1, hfile1, HAN_SOURCEDATA_Y + HAN_SOURCEDATA_UV);
memcpy(src2, hfile2, HAN_DSTDATA_Y + HAN_DSTDATA_UV);

拿文件句柄做内存拷贝?
这里是不是有啥误解啊,呵呵。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧