Fix binary compatibility of opencv_flann

This commit is contained in:
Andrey Kamaev 2012-10-15 20:46:39 +04:00
parent 64b56d7018
commit 88e9a072ec
3 changed files with 41 additions and 6 deletions

View File

@ -380,6 +380,41 @@ struct HammingLUT
typedef unsigned char ElementType; typedef unsigned char ElementType;
typedef int ResultType; typedef int ResultType;
/** this will count the bits in a ^ b
*/
ResultType operator()(const unsigned char* a, const unsigned char* b, int size) const
{
static const uchar popCountTable[] =
{
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
};
ResultType result = 0;
for (int i = 0; i < size; i++) {
result += popCountTable[a[i] ^ b[i]];
}
return result;
}
};
/**
* Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor
* bit count of A exclusive XOR'ed with B
*/
struct HammingLUT2
{
typedef False is_kdtree_distance;
typedef False is_vector_space_distance;
typedef unsigned char ElementType;
typedef int ResultType;
/** this will count the bits in a ^ b /** this will count the bits in a ^ b
*/ */
ResultType operator()(const unsigned char* a, const unsigned char* b, size_t size) const ResultType operator()(const unsigned char* a, const unsigned char* b, size_t size) const

View File

@ -32,7 +32,7 @@
#define OPENCV_FLANN_TIMER_H #define OPENCV_FLANN_TIMER_H
#include <time.h> #include <time.h>
#include "opencv2/core/core.hpp"
namespace cvflann namespace cvflann
{ {
@ -44,7 +44,7 @@ namespace cvflann
*/ */
class StartStopTimer class StartStopTimer
{ {
int64 startTime; clock_t startTime;
public: public:
/** /**
@ -66,7 +66,7 @@ public:
*/ */
void start() void start()
{ {
startTime = cv::getTickCount(); startTime = clock();
} }
/** /**
@ -74,8 +74,8 @@ public:
*/ */
void stop() void stop()
{ {
int64 stopTime = cv::getTickCount(); clock_t stopTime = clock();
value += ( (double)stopTime - startTime) / cv::getTickFrequency(); value += ( (double)stopTime - startTime) / CLOCKS_PER_SEC;
} }
/** /**

View File

@ -331,7 +331,7 @@ buildIndex(void*& index, const Mat& data, const IndexParams& params, const Dista
#if CV_NEON #if CV_NEON
typedef ::cvflann::Hamming<uchar> HammingDistance; typedef ::cvflann::Hamming<uchar> HammingDistance;
#else #else
typedef ::cvflann::HammingLUT HammingDistance; typedef ::cvflann::HammingLUT2 HammingDistance;
#endif #endif
Index::Index() Index::Index()