版权声明:本文为博主原创文章,未经博主允许不得转载。 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 |