如何通过opencv中的程序参数定义特征类型?
How to define feature type through program argument in opencv?
当前更改要素类型是通过在代码中手动更改名称来完成的。例如,对于 SURF 检测器和描述符,我必须在以下代码示例中将单词"SURF"更改为其他名称:
Ptr<SURF> detector = SURF::create();
Ptr<SURF> descriptor = SURF::create();
有没有办法通过程序参数更改"SURF"部分来更改特征类型?
我希望能够批量评估多个要素类型,而不是每次都手动键入要素类型。
您似乎希望Ptr<FeatureDetector> cv::FeatureDetector::create(const string& detectorType)
函数提供的功能:
"FAST" – FastFeatureDetector
"STAR" – StarFeatureDetector
"SIFT" – SIFT (nonfree module)
"SURF" – SURF (nonfree module)
"ORB" – ORB
"BRISK" – BRISK
"MSER" – MSER
"GFTT" – GoodFeaturesToTrackDetector
"HARRIS" – GoodFeaturesToTrackDetector with Harris detector enabled
"Dense" – DenseFeatureDetector
"SimpleBlob" – SimpleBlobDetector
Also a combined format is supported:
feature detector adapter name ( "Grid" – GridAdaptedFeatureDetector, "Pyramid" – PyramidAdaptedFeatureDetector )
+ feature detector name (see above), for example: "GridFAST", "PyramidSTAR"
它返回指向 FeatureDetector 基类的指针,因此您可以使用多态性在运行时选择特定实现:
//assuming image path is the first command line parameter and detector type is the second parameter
auto image = cv::imread(argv[1]);
auto ptr = cv::FeatureDetector::create(argv[2]); //auto evaulates to cv::Ptr<cv::FeatureDetector> here
std::vector<cv::KeyPoint> keypoints;
ptr->detect(image, keypoints);
for (auto kp : keypoints)
cv::circle(image, kp.pt, 2, cv::Scalar(0, 255, 255), -1);
cv::imwrite(argv[1], image);
模板呢?
template<class T> cv::Ptr<T> FeatureDetectorCreator()
{
return T::create();
};
然后你可以用以下命令调用它:
cv::Ptr<SURF> detector = FeatureDetectorCreator<SURF>();
替代可能是宏。
只有当所有这些特征检测器共享一个通用接口时,才会起作用。
OpenCV 3.x
没有内置函数。使用Ptr<FeatureDetector>
定义检测器(描述符等效于Ptr<DescriptorExtractor>
(。示例代码如下:
string det = argv[4]; //assuming detector definition is fourth argument
Ptr<FeatureDetector> detector;
if (det == "SURF") {
detector = SURF::create();
} else if (det == "SIFT") {
detector = SIFT::create();
}
OpenCV 2.4.x
使用提供的函数Ptr<FeatureDetector> cv::FeatureDetector::create(const string& detectorType)
.有关更多详细信息,请参阅slawekwin的回答。
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 根据C++标准的定义实现"is_similar"类型特征
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 特征中的自定义标量类型
- 根据类型特征更改函数定义?
- 使用 C++17 编译特征需要_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING定义
- 如何将自定义特征张量类存储到 std::vector 中?
- std::begin-类型特征中未考虑用户定义的重载
- 定义模板化结构的特征时出现不完整的类型错误
- 如何根据传递给函数的变量定义特征矩阵大小
- 如何通过opencv中的程序参数定义特征类型?
- 使用 c++ 中的特征库定义全局向量
- 我可以将特征定义的变量与函数adjacent_difference一起使用吗?
- 在特征源中是为特定矩阵定义的 sum() 函数
- 在函数定义中使用特征库时,小数点不会按预期存储
- 使用std ::迭代特征和自动定义函数声明的函数
- 类型特征检查 CRTP 派生,在基类中,问题是未定义的类型
- 特征自定义类和函数参数
- 为模板化类定义特征
- enable_if模板专用化自定义特征