主题 : 来看个东西,rgb的几种convert(qt,查表快速转换rgb565 yuv rgb888)比较 复制链接 | 浏览器收藏 | 打印
大笑笑大
级别: 骑士
UID: 25314
精华: 8
发帖: 184
金钱: 1320 两
威望: 264 点
综合积分: 528 分
注册时间: 2010-07-22
最后登录: 2014-10-11
楼主  发表于: 2011-06-02 11:35

 来看个东西,rgb的几种convert(qt,查表快速转换rgb565 yuv rgb888)比较

先上log,在四个平台上各测两次
convert on linux

this a test for convert used time.
rgb888 init used:4 ms.
qt   convert:rgb888 -> rgb565 used:10 ms.
qt   convert:rgb565 -> rgb888 used:10 ms.
soft convert:rgb565 -> rgb888 used:6 ms <--half.
soft convert:rgb565 -> rgb888 used:23 ms.
soft convert:rgb565 -> yuyv   used:14 ms.
soft convert:yuyv   -> rgb888 used:10 ms.

this a test for convert used time.
rgb888 init used:5 ms.
qt   convert:rgb888 -> rgb565 used:9 ms.
qt   convert:rgb565 -> rgb888 used:16 ms.
soft convert:rgb565 -> rgb888 used:2 ms <--half.
soft convert:rgb565 -> rgb888 used:11 ms.
soft convert:rgb565 -> yuyv   used:14 ms.
soft convert:yuyv   -> rgb888 used:10 ms.

convert on windows xp

this a test for convert used time.
rgb888 init used:0 ms.
qt   convert:rgb888 -> rgb565 used:16 ms.
qt   convert:rgb565 -> rgb888 used:47 ms.
soft convert:rgb565 -> rgb888 used:15 ms <--half.
soft convert:rgb565 -> rgb888 used:0 ms.
soft convert:rgb565 -> yuyv   used:16 ms.
soft convert:yuyv   -> rgb888 used:16 ms.

this a test for convert used time.
rgb888 init used:15 ms.
qt   convert:rgb888 -> rgb565 used:31 ms.
qt   convert:rgb565 -> rgb888 used:32 ms.
soft convert:rgb565 -> rgb888 used:0 ms <--half.
soft convert:rgb565 -> rgb888 used:0 ms.
soft convert:rgb565 -> yuyv   used:0 ms.
soft convert:yuyv   -> rgb888 used:0 ms.

convert on mini2440 (arm-linux-gcc4.3.2)
[root@FriendlyARM qt4_code]# ./convert_test -qws
this a test for convert used time.
rgb888 init used:34 ms.
qt   convert:rgb888 -> rgb565 used:68 ms.
qt   convert:rgb565 -> rgb888 used:83 ms.
soft convert:rgb565 -> rgb888 used:22 ms <--half.
soft convert:rgb565 -> rgb888 used:77 ms.
soft convert:rgb565 -> yuyv   used:113 ms.
soft convert:yuyv   -> rgb888 used:104 ms.
^C  
[root@FriendlyARM qt4_code]# ./convert_test -qws
this a test for convert used time.
rgb888 init used:34 ms.qt   convert:rgb888 -> rgb565 used:69 ms.
qt   convert:rgb565 -> rgb888 used:83 ms.
soft convert:rgb565 -> rgb888 used:22 ms <--half.
soft convert:rgb565 -> rgb888 used:78 ms.
soft convert:rgb565 -> yuyv   used:113 ms.
soft convert:yuyv   -> rgb888 used:102 ms.

convert on tiny6410 (arm-linux-gcc4.3.2)
[root@FriendlyARM qt4_code]# ./convert_test -qws
this a test for convert used time.
rgb888 init used:44 ms.qt   convert:rgb888 -> rgb565 used:62 ms.
qt   convert:rgb565 -> rgb888 used:93 ms.
soft convert:rgb565 -> rgb888 used:21 ms <--half.
soft convert:rgb565 -> rgb888 used:76 ms.
soft convert:rgb565 -> yuyv   used:103 ms.
soft convert:yuyv   -> rgb888 used:86 ms.
^C
[root@FriendlyARM qt4_code]# ./convert_test -qws
this a test for convert used time.
rgb888 init used:44 ms.
qt   convert:rgb888 -> rgb565 used:61 ms.
qt   convert:rgb565 -> rgb888 used:92 ms.
soft convert:rgb565 -> rgb888 used:21 ms <--half.
soft convert:rgb565 -> rgb888 used:75 ms.
soft convert:rgb565 -> yuyv   used:105 ms.
soft convert:yuyv   -> rgb888 used:87 ms.
从上面看到tiny6410速度没有上去!!!还比2440差!怎么回事??友善的技术人员能否解释下呢?

下面附主程序源码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "convert.h"
#include <QApplication>
#define width 640
#define height 480
#define depth 3
Convert::Convert(QMainWindow *parent):QMainWindow(parent)
{
    int h,w;
    Rgb_convert = new rgb_utils();
    printf("this a test for convert used time.\n");
    Img_888 = new QImage(width,height,QImage::Format_RGB888);
    Img_888->fill(0);
    char *Image_ptr=(char *)Img_888->bits();
    char Image_val_g=0;
    char Image_val_b=0;
    /************rgb888 init*************/
    timer_calc.start();
    for(h=0;h<height;h++){
        for(w=0;w<width;w++){
            *Image_ptr++=(char)(w & 0xff);
            //*Image_ptr++=(char)((w & 0xff00)>>8);
            //*Image_ptr++=(char)((w & 0xff0000)>>16);
            *Image_ptr++=Image_val_g;
            *Image_ptr++=Image_val_b;
        }
        Image_val_g++;
        if(Image_val_g==0)Image_val_b++;
    }
    printf("rgb888 init used:%d ms.\n",timer_calc.elapsed());
    Img_888->save("./original_rgb888.png");
//以上为原始图像生成代码。看下真实图像


    /*************qt convert***************/
    timer_calc.start();
    Img_565 =new QImage(Img_888->convertToFormat(QImage::Format_RGB16));
    printf("qt   convert:rgb888 -> rgb565 used:%d ms.\n",timer_calc.elapsed());
    Img_565->save("./rgb888convertTorgb565.png");

    timer_calc.start();
    Img_temp_888 = new QImage(Img_565->convertToFormat(QImage::Format_RGB888));
    printf("qt   convert:rgb565 -> rgb888 used:%d ms.\n",timer_calc.elapsed());
    Img_temp_888->save("./rgb565converTorgb888.png");
    /*************soft convert***************/
    Img_temp_888 = new QImage(width/2,height/2,QImage::Format_RGB888);
    timer_calc.start();
    Rgb_convert->compress_rgb565_to_rgb((uint8_t *)Img_565->bits(),width,height,(uint8_t *)Img_temp_888->bits(),width/2,height/2);
    printf("soft convert:rgb565 -> rgb888 used:%d ms <--half.\n",timer_calc.elapsed());
    Img_temp_888->save("./rgb565softconverTorgb888_half.png");

    Img_temp_888 = new QImage(width,height,QImage::Format_RGB888);
    timer_calc.start();
    Rgb_convert->compress_rgb565_to_rgb((uint8_t *)Img_565->bits(),width,height,(uint8_t *)Img_temp_888->bits(),width,height);
    printf("soft convert:rgb565 -> rgb888 used:%d ms.\n",timer_calc.elapsed());
    Img_temp_888->save("./rgb565softconverTorgb888.png");

    Img_yuyv = new QImage(width,height,QImage::Format_RGB16);
    timer_calc.start();
    Rgb_convert->compress_rgb565_to_yuyv((uint8_t *)Img_565->bits(),width,height,(uint8_t *)Img_yuyv->bits());
    printf("soft convert:rgb565 -> yuyv   used:%d ms.\n",timer_calc.elapsed());
    timer_calc.start();
    Rgb_convert->compress_yuyv_to_rgb(Img_yuyv->bits(),Img_temp_888->bits(),width,height);
    printf("soft convert:yuyv   -> rgb888 used:%d ms.\n",timer_calc.elapsed());
    Img_temp_888->save("./rgb565_yuyv_rgb888.png");
}
附件为整个源码,希望其他人也测试下。看看是啥原因??
[ 此帖被xphyym在2011-06-02 16:15重新编辑 ]
附件: convert_test.rar (4 K) 下载次数:71
级别: 新手上路
UID: 21640
精华: 0
发帖: 32
金钱: 160 两
威望: 32 点
综合积分: 64 分
注册时间: 2010-05-19
最后登录: 2017-09-13
1楼  发表于: 2011-06-02 15:10
好东西 大家分享
大笑笑大
级别: 骑士
UID: 25314
精华: 8
发帖: 184
金钱: 1320 两
威望: 264 点
综合积分: 528 分
注册时间: 2010-07-22
最后登录: 2014-10-11
2楼  发表于: 2011-06-07 13:18
没人知道~~