# define CV_BIG_UINT(n) n##ULL
#endif
+#define CV_USRTYPE1 (void)"CV_USRTYPE1 support has been dropped in OpenCV 4.0"
+
#define CV_CN_MAX 512
#define CV_CN_SHIFT 3
#define CV_DEPTH_MAX (1 << CV_CN_SHIFT)
#define CV_32S 4
#define CV_32F 5
#define CV_64F 6
-#define CV_USRTYPE1 7
#define CV_16F 7
#define CV_MAT_DEPTH_MASK (CV_DEPTH_MAX - 1)
#define CV_SEQ_ELTYPE_POINT CV_32SC2 /**< (x,y) */
#define CV_SEQ_ELTYPE_CODE CV_8UC1 /**< freeman code: 0..7 */
#define CV_SEQ_ELTYPE_GENERIC 0
-#define CV_SEQ_ELTYPE_PTR CV_USRTYPE1
+#define CV_SEQ_ELTYPE_PTR CV_MAKE_TYPE(CV_8U, 8 /*sizeof(void*)*/)
#define CV_SEQ_ELTYPE_PPOINT CV_SEQ_ELTYPE_PTR /**< &(x,y) */
#define CV_SEQ_ELTYPE_INDEX CV_32SC1 /**< #(x,y) */
#define CV_SEQ_ELTYPE_GRAPH_EDGE 0 /**< &next_o, &next_d, &vtx_o, &vtx_d */
int elemtype = CV_MAT_TYPE(seq_flags);
int typesize = CV_ELEM_SIZE(elemtype);
- if( elemtype != CV_SEQ_ELTYPE_GENERIC && elemtype != CV_USRTYPE1 &&
+ if( elemtype != CV_SEQ_ELTYPE_GENERIC && elemtype != CV_SEQ_ELTYPE_PTR &&
typesize != 0 && typesize != (int)elem_size )
CV_Error( CV_StsBadSize,
"Specified element size doesn't match to the size of the specified element type "
fs->is_write_struct_delayed = true;
}
+// FIXIT: conflict with 8UC8 (replacement for CV_USRTYPE1)
static const char symbols[9] = "ucwsifdr";
-char icvTypeSymbol(int depth)
+static char icvTypeSymbol(int depth)
{
- CV_Assert(depth >=0 && depth < 9);
+ CV_StaticAssert(CV_64F == 6, "");
+ CV_Assert(depth >=0 && depth <= CV_64F);
return symbols[depth];
}
const char* pos = strchr( symbols, c );
if( !pos )
CV_Error( CV_StsBadArg, "Invalid data type specification" );
+ if (c == 'r')
+ return CV_SEQ_ELTYPE_PTR;
return static_cast<int>(pos - symbols);
}
-char* icvEncodeFormat( int elem_type, char* dt )
+char* icvEncodeFormat(int elem_type, char* dt)
{
- sprintf( dt, "%d%c", CV_MAT_CN(elem_type), icvTypeSymbol(CV_MAT_DEPTH(elem_type)) );
- return dt + ( dt[2] == '\0' && dt[0] == '1' );
+ int cn = (elem_type == CV_SEQ_ELTYPE_PTR/*CV_USRTYPE1*/) ? 1 : CV_MAT_CN(elem_type);
+ char symbol = (elem_type == CV_SEQ_ELTYPE_PTR/*CV_USRTYPE1*/) ? 'r' : icvTypeSymbol(CV_MAT_DEPTH(elem_type));
+ sprintf(dt, "%d%c", cn, symbol);
+ return dt + (cn == 1 ? 1 : 0);
}
int icvDecodeFormat( const char* dt, int* fmt_pairs, int max_len )
char* icvFloatToString( char* buf, float value );
char* icvDoubleToString( char* buf, double value );
-char icvTypeSymbol(int depth);
void icvClose( CvFileStorage* fs, cv::String* out );
void icvCloseFile( CvFileStorage* fs );
void icvPuts( CvFileStorage* fs, const char* str );
ptr = icvDoubleToString( buf, *(double*)data );
data += sizeof(double);
break;
- case CV_USRTYPE1: /* reference */
+ case CV_SEQ_ELTYPE_PTR/*CV_USRTYPE1*/: /* reference */
ptr = icv_itoa( (int)*(size_t*)data, buf, 10 );
data += sizeof(size_t);
break;
*(double*)data = (double)ival;
data += sizeof(double);
break;
- case CV_USRTYPE1: /* reference */
+ case CV_SEQ_ELTYPE_PTR/*CV_USRTYPE1*/: /* reference */
*(size_t*)data = ival;
data += sizeof(size_t);
break;
*(double*)data = fval;
data += sizeof(double);
break;
- case CV_USRTYPE1: /* reference */
+ case CV_SEQ_ELTYPE_PTR/*CV_USRTYPE1*/: /* reference */
ival = cvRound(fval);
*(size_t*)data = ival;
data += sizeof(size_t);
}
depth = IPL2CV_DEPTH(image->depth);
- sprintf( dt_buf, "%d%c", image->nChannels, icvTypeSymbol(depth) );
- dt = dt_buf + (dt_buf[2] == '\0' && dt_buf[0] == '1');
+ dt = icvEncodeFormat(depth, dt_buf);
cvWriteString( fs, "dt", dt, 0 );
size = cvSize(image->width, image->height);
{ device::ccl::computeEdges<int>, 0, 0, 0 },// CV_32S
{ device::ccl::computeEdges<float>, 0, 0, 0 },// CV_32F
{ 0, 0, 0, 0 },// CV_64F
- { 0, 0, 0, 0 } // CV_USRTYPE1
+ { 0, 0, 0, 0 } // CV_16F
};
func_t f = suppotLookup[depth][ch - 1];
+ "<indexParams>\n"
+ " <_>\n"
+ " <name>algorithm</name>\n"
- + " <type>23</type>\n"
+ + " <type>9</type>\n" // FLANN_INDEX_TYPE_ALGORITHM
+ " <value>1</value></_>\n"
+ " <_>\n"
+ " <name>trees</name>\n"
+ " <value>0.</value></_>\n"
+ " <_>\n"
+ " <name>sorted</name>\n"
- + " <type>15</type>\n"
+ + " <type>8</type>\n" // FLANN_INDEX_TYPE_BOOL
+ " <value>1</value></_></searchParams>\n"
+ "</opencv_storage>\n";
static final String ymlParamsDefault = "%YAML:1.0\n---\n"
+ "indexParams:\n"
+ " -\n"
+ " name: algorithm\n"
- + " type: 23\n"
+ + " type: 9\n" // FLANN_INDEX_TYPE_ALGORITHM
+ " value: 1\n"
+ " -\n"
+ " name: trees\n"
+ " value: 0.\n"
+ " -\n"
+ " name: sorted\n"
- + " type: 15\n"
+ + " type: 8\n" // FLANN_INDEX_TYPE_BOOL
+ " value: 1\n";
static final String ymlParamsModified = "%YAML:1.0\n---\n"
+ "format: 3\n"
+ "indexParams:\n"
+ " -\n"
+ " name: algorithm\n"
- + " type: 23\n"
+ + " type: 9\n" // FLANN_INDEX_TYPE_ALGORITHM
+ " value: 6\n"// this line is changed!
+ " -\n"
+ " name: trees\n"
+ " value: 4.\n"// this line is changed!
+ " -\n"
+ " name: sorted\n"
- + " type: 15\n"
+ + " type: 8\n" // FLANN_INDEX_TYPE_BOOL
+ " value: 1\n";
DescriptorMatcher matcher;
//M*/
#include "precomp.hpp"
+#include "opencv2/flann/miniflann.hpp"
#include <limits>
#include "opencl_kernels_features2d.hpp"
}
}
+using namespace cv::flann;
+
void FlannBasedMatcher::read( const FileNode& fn)
{
if (!indexParams)
{
CV_Assert(ip[i].type() == FileNode::MAP);
String _name = (String)ip[i]["name"];
- int type = (int)ip[i]["type"];
+ FlannIndexType type = (FlannIndexType)(int)ip[i]["type"];
+ CV_CheckLE((int)type, (int)LAST_VALUE_FLANN_INDEX_TYPE, "");
switch(type)
{
- case CV_8U:
- case CV_8S:
- case CV_16U:
- case CV_16S:
- case CV_32S:
+ case FLANN_INDEX_TYPE_8U:
+ case FLANN_INDEX_TYPE_8S:
+ case FLANN_INDEX_TYPE_16U:
+ case FLANN_INDEX_TYPE_16S:
+ case FLANN_INDEX_TYPE_32S:
indexParams->setInt(_name, (int) ip[i]["value"]);
break;
- case CV_32F:
+ case FLANN_INDEX_TYPE_32F:
indexParams->setFloat(_name, (float) ip[i]["value"]);
break;
- case CV_64F:
+ case FLANN_INDEX_TYPE_64F:
indexParams->setDouble(_name, (double) ip[i]["value"]);
break;
- case CV_USRTYPE1:
+ case FLANN_INDEX_TYPE_STRING:
indexParams->setString(_name, (String) ip[i]["value"]);
break;
- case CV_MAKETYPE(CV_USRTYPE1,2):
+ case FLANN_INDEX_TYPE_BOOL:
indexParams->setBool(_name, (int) ip[i]["value"] != 0);
break;
- case CV_MAKETYPE(CV_USRTYPE1,3):
+ case FLANN_INDEX_TYPE_ALGORITHM:
indexParams->setAlgorithm((int) ip[i]["value"]);
break;
+ // don't default: - compiler warning is here
};
}
{
CV_Assert(sp[i].type() == FileNode::MAP);
String _name = (String)sp[i]["name"];
- int type = (int)sp[i]["type"];
+ FlannIndexType type = (FlannIndexType)(int)sp[i]["type"];
+ CV_CheckLE((int)type, (int)LAST_VALUE_FLANN_INDEX_TYPE, "");
switch(type)
{
- case CV_8U:
- case CV_8S:
- case CV_16U:
- case CV_16S:
- case CV_32S:
+ case FLANN_INDEX_TYPE_8U:
+ case FLANN_INDEX_TYPE_8S:
+ case FLANN_INDEX_TYPE_16U:
+ case FLANN_INDEX_TYPE_16S:
+ case FLANN_INDEX_TYPE_32S:
searchParams->setInt(_name, (int) sp[i]["value"]);
break;
- case CV_32F:
+ case FLANN_INDEX_TYPE_32F:
searchParams->setFloat(_name, (float) ip[i]["value"]);
break;
- case CV_64F:
+ case FLANN_INDEX_TYPE_64F:
searchParams->setDouble(_name, (double) ip[i]["value"]);
break;
- case CV_USRTYPE1:
+ case FLANN_INDEX_TYPE_STRING:
searchParams->setString(_name, (String) ip[i]["value"]);
break;
- case CV_MAKETYPE(CV_USRTYPE1,2):
+ case FLANN_INDEX_TYPE_BOOL:
searchParams->setBool(_name, (int) ip[i]["value"] != 0);
break;
- case CV_MAKETYPE(CV_USRTYPE1,3):
+ case FLANN_INDEX_TYPE_ALGORITHM:
searchParams->setAlgorithm((int) ip[i]["value"]);
break;
+ // don't default: - compiler warning is here
};
}
if (indexParams)
{
std::vector<String> names;
- std::vector<int> types;
+ std::vector<FlannIndexType> types;
std::vector<String> strValues;
std::vector<double> numValues;
for(size_t i = 0; i < names.size(); ++i)
{
fs << "{" << "name" << names[i] << "type" << types[i] << "value";
- switch(types[i])
+ FlannIndexType type = (FlannIndexType)types[i];
+ if ((int)type < 0 || type > LAST_VALUE_FLANN_INDEX_TYPE)
+ {
+ fs << (double)numValues[i];
+ fs << "typename" << strValues[i];
+ fs << "}";
+ continue;
+ }
+ switch(type)
{
- case CV_8U:
+ case FLANN_INDEX_TYPE_8U:
fs << (uchar)numValues[i];
break;
- case CV_8S:
+ case FLANN_INDEX_TYPE_8S:
fs << (char)numValues[i];
break;
- case CV_16U:
+ case FLANN_INDEX_TYPE_16U:
fs << (ushort)numValues[i];
break;
- case CV_16S:
+ case FLANN_INDEX_TYPE_16S:
fs << (short)numValues[i];
break;
- case CV_32S:
- case CV_MAKETYPE(CV_USRTYPE1,2):
- case CV_MAKETYPE(CV_USRTYPE1,3):
+ case FLANN_INDEX_TYPE_32S:
+ case FLANN_INDEX_TYPE_BOOL:
+ case FLANN_INDEX_TYPE_ALGORITHM:
fs << (int)numValues[i];
break;
- case CV_32F:
+ case FLANN_INDEX_TYPE_32F:
fs << (float)numValues[i];
break;
- case CV_64F:
+ case FLANN_INDEX_TYPE_64F:
fs << (double)numValues[i];
break;
- case CV_USRTYPE1:
+ case FLANN_INDEX_TYPE_STRING:
fs << strValues[i];
break;
- default:
- fs << (double)numValues[i];
- fs << "typename" << strValues[i];
- break;
+ // don't default: - compiler warning is here
}
fs << "}";
}
if (searchParams)
{
std::vector<String> names;
- std::vector<int> types;
+ std::vector<FlannIndexType> types;
std::vector<String> strValues;
std::vector<double> numValues;
for(size_t i = 0; i < names.size(); ++i)
{
fs << "{" << "name" << names[i] << "type" << types[i] << "value";
- switch(types[i])
+ FlannIndexType type = (FlannIndexType)types[i];
+ if ((int)type < 0 || type > LAST_VALUE_FLANN_INDEX_TYPE)
+ {
+ fs << (double)numValues[i];
+ fs << "typename" << strValues[i];
+ fs << "}";
+ continue;
+ }
+ switch(type)
{
- case CV_8U:
+ case FLANN_INDEX_TYPE_8U:
fs << (uchar)numValues[i];
break;
- case CV_8S:
+ case FLANN_INDEX_TYPE_8S:
fs << (char)numValues[i];
break;
- case CV_16U:
+ case FLANN_INDEX_TYPE_16U:
fs << (ushort)numValues[i];
break;
- case CV_16S:
+ case FLANN_INDEX_TYPE_16S:
fs << (short)numValues[i];
break;
- case CV_32S:
- case CV_MAKETYPE(CV_USRTYPE1,2):
- case CV_MAKETYPE(CV_USRTYPE1,3):
+ case FLANN_INDEX_TYPE_32S:
+ case FLANN_INDEX_TYPE_BOOL:
+ case FLANN_INDEX_TYPE_ALGORITHM:
fs << (int)numValues[i];
break;
case CV_32F:
case CV_64F:
fs << (double)numValues[i];
break;
- case CV_USRTYPE1:
+ case FLANN_INDEX_TYPE_STRING:
fs << strValues[i];
break;
- default:
- fs << (double)numValues[i];
- fs << "typename" << strValues[i];
- break;
+ // don't default: - compiler warning is here
}
fs << "}";
}
namespace flann
{
+enum FlannIndexType {
+ FLANN_INDEX_TYPE_8U = CV_8U,
+ FLANN_INDEX_TYPE_8S = CV_8S,
+ FLANN_INDEX_TYPE_16U = CV_16U,
+ FLANN_INDEX_TYPE_16S = CV_16S,
+ FLANN_INDEX_TYPE_32S = CV_32S,
+ FLANN_INDEX_TYPE_32F = CV_32F,
+ FLANN_INDEX_TYPE_64F = CV_64F,
+ FLANN_INDEX_TYPE_STRING,
+ FLANN_INDEX_TYPE_BOOL,
+ FLANN_INDEX_TYPE_ALGORITHM,
+ LAST_VALUE_FLANN_INDEX_TYPE = FLANN_INDEX_TYPE_ALGORITHM
+};
+
struct CV_EXPORTS IndexParams
{
IndexParams();
void setBool(const String& key, bool value);
void setAlgorithm(int value);
+ // FIXIT: replace by void write(FileStorage& fs) const + read()
void getAll(std::vector<String>& names,
- std::vector<int>& types,
+ std::vector<FlannIndexType>& types,
std::vector<String>& strValues,
std::vector<double>& numValues) const;
}
void IndexParams::getAll(std::vector<String>& names,
- std::vector<int>& types,
+ std::vector<FlannIndexType>& types,
std::vector<String>& strValues,
std::vector<double>& numValues) const
{
try
{
String val = it->second.cast<String>();
- types.push_back(CV_USRTYPE1);
+ types.push_back(FLANN_INDEX_TYPE_STRING);
strValues.push_back(val);
numValues.push_back(-1);
continue;
try
{
double val = it->second.cast<double>();
- types.push_back( CV_64F );
+ types.push_back(FLANN_INDEX_TYPE_64F);
numValues.push_back(val);
continue;
}
try
{
float val = it->second.cast<float>();
- types.push_back( CV_32F );
+ types.push_back(FLANN_INDEX_TYPE_32F);
numValues.push_back(val);
continue;
}
try
{
int val = it->second.cast<int>();
- types.push_back( CV_32S );
+ types.push_back(FLANN_INDEX_TYPE_32S);
numValues.push_back(val);
continue;
}
try
{
short val = it->second.cast<short>();
- types.push_back( CV_16S );
+ types.push_back(FLANN_INDEX_TYPE_16S);
numValues.push_back(val);
continue;
}
try
{
ushort val = it->second.cast<ushort>();
- types.push_back( CV_16U );
+ types.push_back(FLANN_INDEX_TYPE_16U);
numValues.push_back(val);
continue;
}
try
{
char val = it->second.cast<char>();
- types.push_back( CV_8S );
+ types.push_back(FLANN_INDEX_TYPE_8S);
numValues.push_back(val);
continue;
}
try
{
uchar val = it->second.cast<uchar>();
- types.push_back( CV_8U );
+ types.push_back(FLANN_INDEX_TYPE_8U);
numValues.push_back(val);
continue;
}
try
{
bool val = it->second.cast<bool>();
- types.push_back( CV_MAKETYPE(CV_USRTYPE1,2) );
+ types.push_back(FLANN_INDEX_TYPE_BOOL);
numValues.push_back(val);
continue;
}
try
{
cvflann::flann_algorithm_t val = it->second.cast<cvflann::flann_algorithm_t>();
- types.push_back( CV_MAKETYPE(CV_USRTYPE1,3) );
+ types.push_back(FLANN_INDEX_TYPE_ALGORITHM);
numValues.push_back(val);
continue;
}
catch (...) {}
- types.push_back(-1); // unknown type
+ types.push_back((FlannIndexType)-1); // unknown type
numValues.push_back(-1);
}
}
void PrintTo(const MatType& t, ::std::ostream* os)
{
- switch( CV_MAT_DEPTH((int)t) )
- {
- case CV_8U: *os << "8U"; break;
- case CV_8S: *os << "8S"; break;
- case CV_16U: *os << "16U"; break;
- case CV_16S: *os << "16S"; break;
- case CV_32S: *os << "32S"; break;
- case CV_32F: *os << "32F"; break;
- case CV_64F: *os << "64F"; break;
- case CV_USRTYPE1: *os << "16F"; break;
- default: *os << "INVALID_TYPE"; break;
- }
- *os << 'C' << CV_MAT_CN((int)t);
+ String name = typeToString(t);
+ if (name.size() > 3 && name[0] == 'C' && name[1] == 'V' && name[2] == '_')
+ *os << name.substr(3);
+ else
+ *os << name;
}
} //namespace perf