最近在查阅ORB算法的相关资料,其中涉及到求两个01字符串间的hamming距离,作为度量两个向量距离的值。在opencv库中有结构体HammingLUT,来看看它的定义:
struct CV_EXPORTS Hamming
{
enum { normType = NORM_HAMMING };
typedef unsigned char ValueType;
typedef int ResultType;
/** this will count the bits in a ^ b
*/
ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const
{
return normHamming(a, b, size);
}
};
typedef Hamming HammingLUT;
在代码中的运用:
HammingLUT lut;
unsigned int result;
result = lut((a), (b), size);
其中a,b为字符数组的首地址,size为需要比较的位数。举个例子:unsigned char a[3]={'001','010','011'}, b[3]={'001','011','100'}(为了方便分析,采用的二进制表示),那么执行: