我正在尝试获取this存储库中提供的算法以在Windows上工作。在无数问题之后,我只剩下一个无法识别的函数cvLoadImage,它被适当地描述了。有人指示我改用c ++ API,但问题是我还必须重写代码的其他部分,否则可能会破坏它。
#include <opencv2/imgcodecs/imgcodecs_c.h>
在Visual Studio上返回以下错误:
“此具有旧式C API声明的标头已从OpenCV中删除。旧式内容可从legacy / constants_c.h文件中获得。”
我导入了opencv文件夹中提供的所有名为constants_c.h的文件,但没有一个包含函数定义。
答案 0 :(得分:1)
确实是旧的OpenCV C API。您将需要将旧的C函数移植到c ++ OpenCV API,例如:
cvNamedWindow
-> cv::namedWindow
cvRectangle
-> cv::rectangle
cvPoint
-> cv::Point
等
您使用的代码实际上是旧C API和新c ++ API的混合。 只需遍历该存储库中的所有C API调用并将它们手动移植到c ++ API即可。正如您在上面看到的,大多数情况下,这是相当直观的。如有疑问,请搜索OpenCV文档。
另外,您应该查看YOLOv2来检测行人。
更新:
此存储库有多个分支,看起来Berak已经有removed the C API calls。他的更改是merged,因此您应该提取最新的更改并重建:
cd C4-Real-time-pedestrian-detection
git pull
cmake . -DCMAKE_CXX_FLAGS="-std=c++11"
make -j8
我已经在计算机上测试了以上内容:
关于我的设置,我首先遇到此错误:
cvdef.h:656:4: error: "OpenCV 4.x+ requires enabled C++11 support"
这就是为什么我将-std=c++11
编译器标志传递给cmake的原因。
这可能是因为我是带有Xcode 7.0的OSX(10.11.6)的旧版本(现在大约3年了)。当前计算机具有8个内核,因此为make -j8
。
可以根据需要在计算机上随意更改这两个选项。