我注意到 opencv 4 已发布,其中一个区别是 API 更改为与 c++11 兼容。
这究竟意味着什么?
我应该如何更改我的代码以与此版本兼容?
原文由 mans 发布,翻译遵循 CC BY-SA 4.0 许可协议
根据 OpenCV 4.0.0 ,您不必对源代码进行任何重大修改(很可能根本没有),除非您使用的是已删除的某些 C API。
如前所述
OpenCV 现在是 C++11 库, 需要 兼容 C++11 的编译器
要使用 c++11
,clang 版本 3.3 和更高版本需要带有标志 -std=c++11
。对于 g++ 4.3 及更高版本也是如此。
它允许他们使用 std::string
而不是 cv::String
和其他 c++11 功能。但别担心, cv::String
仍然可以工作,但现在是 std::string
的别名。与智能指针等类似。
原文由 kocica 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
我认为最不同的是,
OpenCV 4.0
使用了更多的 C++11 特性。现在cv::String == std::string
和cv::Ptr
是std::shared_ptr
之上的薄包装。Opencv 4.0 删除文件夹
include/opencv
并只保留include/opencv2
。 OpenCV 1.x 中的许多 C API 已被删除。受影响的模块是objdetect, photo, video, videoio, imgcodecs, calib3d
。不建议使用旧的宏定义或未命名的枚举,请使用已命名的枚举。例如,读取图像时,应该是这样的:
除了新功能外,大多数 C++ API 保持不变。虽然我发现最大的不同是
cv2.findContours
(在Python OpenCV
中):在 OpenCV 3.4 中:
在 OpenCV 4.0 中:
使用 2.x 、3.x、4.x 的替代方法是:
一些链接: