The problem is resolved.
I applied the following patch to ~ / Downloads / OpenCV-2.4.2 / modules / features2d / src / freak.cpp
diff -crB OpenCV-2.4.2.orig/modules/features2d/src/freak.cpp OpenCV-2.4.2/modules/features2d/src/freak.cpp *** OpenCV-2.4.2.orig/modules/features2d/src/freak.cpp 2012-07-25 09:54:50.000000000 -0400 --- OpenCV-2.4.2/modules/features2d/src/freak.cpp 2012-07-24 10:34:57.000000000 -0400 *************** *** 364,370 **** __m128i workReg = _mm_min_epu8(operand1, operand2); // emulated "not less than" for 8-bit UNSIGNED integers workReg = _mm_cmpeq_epi8(workReg, operand2); // emulated "not less than" for 8-bit UNSIGNED integers ! workReg = _mm_and_si128(_mm_srli_epi16(binMask, m), workReg); // merge the last 16 bits with the 128bits std::vector until full result128 = _mm_or_si128(result128, workReg); } (*ptr) = result128; --- 364,404 ---- __m128i workReg = _mm_min_epu8(operand1, operand2); // emulated "not less than" for 8-bit UNSIGNED integers workReg = _mm_cmpeq_epi8(workReg, operand2); // emulated "not less than" for 8-bit UNSIGNED integers ! // merge the last 16 bits with the 128bits std::vector until full ! __m128i shiftedMask; ! switch(m) { ! case 8: ! shiftedMask = _mm_srli_epi16(binMask, 8); ! break; ! case 7: ! shiftedMask = _mm_srli_epi16(binMask, 7); ! break; ! case 6: ! shiftedMask = _mm_srli_epi16(binMask, 6); ! break; ! case 5: ! shiftedMask = _mm_srli_epi16(binMask, 5); ! break; ! case 4: ! shiftedMask = _mm_srli_epi16(binMask, 4); ! break; ! case 3: ! shiftedMask = _mm_srli_epi16(binMask, 3); ! break; ! case 2: ! shiftedMask = _mm_srli_epi16(binMask, 2); ! break; ! case 1: ! shiftedMask = _mm_srli_epi16(binMask, 1); ! break; ! case 0: ! shiftedMask = _mm_srli_epi16(binMask, 0); ! break; ! default: ! throw "shifting less than 0"; ! } ! workReg = _mm_and_si128(shiftedMask, workReg); ! result128 = _mm_or_si128(result128, workReg); } (*ptr) = result128;
source share