我正在编写(学习)OpenCV代码,我希望用户能够输入cv :: String文件名(.xml)和双重类型参数
我的主要功能是
int main(int argc, const** argv) {
...
在cmd.exe中,我希望程序像
一样被调用> App.exe cascadedClassifier.xml 0.5
其中cascadedClassifier.xml
供用户选择分类,0.5
是双重类型号,用于调整图像大小(框架)
我的一个问题是为什么输入参数是char类型但加载分类器文件的函数需要cv::String type
但它仍然可以在cmd.exe中工作,即使它们是两种不同类型的参数?
另一个问题是我应该在main函数的输入参数中做什么,用户可以在cmd.exe中为程序自由分配双类型输入?
提前致谢。
答案 0 :(得分:5)
C ++语言规范定义了int main(int argc, char* argv[])
entrypoint function - 它与OpenCV完全无关 - 类似OpenCV也不关心你的程序的入口点:OpenCV是一个库,而不是应用程序框架(如MFC或Qt)。
OpenCV的cv::String
类型defines a constructor from const char* s
,用于向cv::String
提供an implicit conversion。
所有命令行参数都是通过argv
传入的,你不能用标准的C / C ++ char
入口点传入非main
- 类型的参数(这个是因为C和C ++没有定义传递非字符串参数的约定,例如,PowerShell,其中Cmdlet参数是根据.NET类型定义的)。您需要使用atof
或sscanf
将参数转换回类型化数据。
答案 1 :(得分:1)
const char*
可以根据the official cv::String Class Reference隐式转换为cv::String
在命令行中,双输入在技术上是不可能的。您可以使用atof(const char*)
函数将char*
类型转换为函数中的float
/ double
类型。