pcl::SHOT352 diff;可以去掉吗
时间: 2023-08-03 22:06:11 浏览: 86
点云库PCL演示文稿
如果不需要存储两个二进制数的异或结果,可以直接在循环中统计两个二进制数的异或结果中1的个数,不需要额外定义一个新的变量来存储。例如:
```
pcl::SHOT352 descriptor1 = shot1->at(i);
pcl::SHOT352 descriptor2 = shot2->at(i);
int count = 0;
for(int j = 0; j < 11; j++) // 11是352位二进制数中uint32_t类型数据的数量
{
uint32_t xor_result = descriptor1.histogram[j] ^ descriptor2.histogram[j];
count += __builtin_popcount(xor_result);
}
```
在上面的代码中,`count`是一个计数器,用于统计两个二进制数的按位异或结果中1的个数。`__builtin_popcount()`是GCC内置函数,用于计算一个`uint32_t`类型数据中1的个数。在循环中,将`descriptor1.histogram[j]`和`descriptor2.histogram[j]`对应的`uint32_t`类型数据进行异或操作,将结果存储到`xor_result`中,然后使用`__builtin_popcount()`函数统计`xor_result`中1的个数,并将结果累加到`count`中。最终,`count`中就存储了两个二进制数的汉明距离。
阅读全文