VEC-C直方图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sac761/article/details/75007674
ushort p_u16DstB0[256*16];
uchar *src=(uchar*)img->imageData;
histogram(src, p_u16DstB0 , p_u16DstB1, width, height, width);
sum_histogram2(p_u16DstB0, p_u16DstB1, (uint*) hist);
void sum_histogram2(ushort* p_u16SrcB0, ushort* p_u16SrcB1, uint* p_u32Dst)
{         /*输出内存信息*/
    for(int i=0;i<32*256;i++)
    {
        if(p_u16SrcB0[i]!=0)
        cout<<i<<":"<<p_u16SrcB0[i]<<",";
    }
}
void histogram(uchar* p_u8Src, ushort* p_u16DstB0 , ushort* p_u16DstB1, uint s32SrcStep, int s32N, int s32M)
{         /*做2次求直方图*/
    short16 v0=(short16)*(uchar16*)p_u8Src;
    vhist((short*)p_u16DstB0,v0); 
    p_u8Src+=16;
    short16 v1=(short16)*(uchar16*)p_u8Src;
    vhist((short*)p_u16DstB0,v1); 
}
需要一个内存为256*32的空间才能装的下直方图结果,红色表示内存地址,v0~v15为vector寄存器

如果寄存器v0中的值为0的话,则内存地址0上的值+1,如果v1中的值为255则内存地址4068上的值+1......

v0 v1 ... v15
0 1 2 3 ... ... 30 31
0 1 0 1 ... ... 0 1
32 33 34 35 ... ... 62 63
2 3 2 3 ... ... 2 3
64 65 66 67 ... ... 94 95
4 5 4 5     4 5
. . . . ... ... . .
. . . . ... ... . .
. . . . ... ... . .
4064 4065 4067 4068     4094 4095
254 255 254 255     254 255

猜你喜欢

转载自blog.csdn.net/sac761/article/details/75007674