YUV处理工具:文件比较功能

  1. 1、方法一: 将YUV读取到buffer中,然后每帧逐字节比较。C语言实现
  2. 2、方法二:Python中filecmp模块
  3. 3、两种方法的比较说明
  4. THE END!

Tags: YUV处理工具:文件比较功能

1、方法一: 将YUV读取到buffer中,然后每帧逐字节比较。C语言实现

#include<stdio.h>
#include <stdlib.h>
#include <string>

int main(int argc, char **argv)
{
    FILE *fin_1 = NULL;
    FILE *fin_2 = NULL;
    FILE *fout = NULL;

    int srcwidth = 0, srcheight = 0;
    int framesize = 0, in1_size = 0, in2_size = 0;
    int srcframenum = 0;
    unsigned char *buffer1 = NULL;
    unsigned char *buffer2 = NULL;

    if (argc!=5)
    {
        printf("Usage: CompareYUV.exe yuv0 yuv1 width height");
        return -1;
    }
    fin_1 = fopen(argv[1],"rb");
    if (!fin_1)
    {
        printf("Open input yuv0 failed!\n");
    }
    fin_2 = fopen(argv[2], "rb");
    if (!fin_2)
    {
        printf("Open input yuv1 failed!\n");
    }
    fout = fopen("compare_result.txt", "a+");
    if (!fout)
    {
        printf("Open compare_result.txt failed!\n");
    }

    srcwidth = atoi(argv[3]);//width
    srcheight = atoi(argv[4]);//height

    framesize = srcheight*srcwidth * 3 / 2;//++YUV420采样格式


    buffer1 = (unsigned char *)malloc(framesize*sizeof(unsigned char*));
    buffer2 = (unsigned char *)malloc(framesize*sizeof(unsigned char*));
    if ((buffer1 == NULL) ||(buffer2 == NULL))
    {
        printf("malloc buffer1 or buffer2 failed!\n");
    }

    fprintf(fout, "%s VS %s!    ", argv[1], argv[2]);
    while ((fread(buffer1, 1, framesize, fin_1) == framesize)&&(fread(buffer2, 1, framesize, fin_2) == framesize))
    {
        int i = 0;
        for (i = 0; i < framesize; i++)
        {
            if (buffer1[i] != buffer2[i])
            {
                fprintf(fout, "framenum:%d  ", srcframenum);
                fprintf(fout, "DISMATCH!\n");
                return -1;
            }
        }
        srcframenum++;
    }

    fprintf(fout, "framenum:%d  ", srcframenum);
    fprintf(fout, "MATCH!\n");


    free(buffer1);
    buffer1 = NULL;
    free(buffer2);
    buffer2 = NULL;

    fclose(fin_1);
    fclose(fin_2);
    fclose(fout);

    return 0;
}

2、方法二:Python中filecmp模块

filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单。python标准库还提供了difflib模块用于比较文件的内容。

filecmp定义了两个函数,用于方便地比较文件与文件夹:

filecmp.cmp(f1, f2[, shallow])

比较两个文件的内容是否匹配。参数f1, f2指定要比较的文件的路径。可选参数shallow指定比较文件时是否需要考虑文件本身的属性(通过os.stat函数可以获得文件属性)。如果文件内容匹配,函数返回True,否则返回False。

3、两种方法的比较说明

说明:第一种C实现的方法比较基础,第二种Python函数的方法比较简洁。

THE END!


本博文只能阅读,谢绝转载,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2963033731@qq.com

文章标题:YUV处理工具:文件比较功能

字数:547

本文作者:Soaring Lee

发布时间:2018-05-21, 21:13:47

最后更新:2021-06-14, 12:13:44

原始链接:https://soaringleefighting.github.io/2018/05/21/【Codecs系列】YUV处理工具:文件比较功能/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏

相册