【发布时间】:2020-05-04 16:12:08
【问题描述】:
我已将其发布为 issue on GitHub opencv_contrib,但尚未收到任何回复。
系统信息(版本)- OpenCV => 4.2.0
- 操作系统/平台 => Windows 10、64 位
- 编译器 => Visual Studio 16 2019
- Python => 3.7.6,使用 Anaconda
我想在 Windows 上使用 Python 中的 Tracker 类,似乎在 Python 中访问算法参数的唯一方法是将 Tracker 对象写入/读取 .yaml 文件。当我尝试Tracker.write() 时,我得到一个 cv2.error。这是我的测试用例:
import cv2
import os
#Display OpenCV version
print(f"OpenCV version: {cv2.__version__}")
#Create tracker object
tracker = cv2.TrackerCSRT_create()
settings_file = "settings.yaml"
#Delete settings file if it exists
if os.path.isfile(settings_file): os.remove(settings_file)
#Create FileNode
fs = cv2.FileStorage(settings_file,cv2.FILE_STORAGE_WRITE)
#Write defaults
tracker.write(fs)
#Release file
fs.release()
当我尝试此操作时(Python 3.7.6、OpenCV 4.2.0... 使用预打包的二进制文件,或从源代码重建时),它在 tracker.write(fs) 行失败并显示以下消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cv2.error: OpenCV(4.2.0) C:\Users\dick\OpenCV\opencv-4.2.0\modules\core\src\matrix_wrap.cpp:112: error: (-213:The function/feature is not implemented) You should explicitly call mapHost/unmapHost methods for ogl::Buffer object in function 'cv::_InputArray::getMat_'
在稍有不同的测试中,我收到以下错误消息:
Traceback (most recent call last):
File "<stdin>", line 5, in <module>
cv2.error: OpenCV(4.2.0) C:\Users\dick\OpenCV\opencv-4.2.0\modules\core\src\matrix_wrap.cpp:130: error: (-213:The function/feature is not implemented) Unknown/unsupported array type in function 'cv::_InputArray::getMat_'
我有一个朋友比我更精通 C++/Linux/Visual Studio,她向我证实这个 tracker.write() 在 Linux 上运行良好,编写了一个 .yaml 文件,就像使用 tracker.read() 一样回读如下:
#Read in the settings
fs_settings = cv2.FileStorage(settings_file,cv2.FILE_STORAGE_READ)
tracker.read(fs_settings.root())
#Release file
fs_settings.release()
当我尝试将tracker.read() 与已知良好的.yaml 文件一起使用时,Python 直接崩溃到命令提示符——根本没有错误消息。我想这是一个密切相关的问题。
我朋友的评价是“据我所知,在 Windows 中,正在创建的 Mat 对象是错误的数据类型(它是否有额外的维度或错误的类型(即 float 与 int)或者它是一个空的空指针) .”,到目前为止,我已经对她施加了足够的时间。有人可以查看 C++ 代码以了解问题所在,以及为什么它可以在 Linux 上运行而不是在 Windows 上运行吗?
在寻找类似问题时,我认为 #2393 看起来有些熟悉,其中 Mat 类的行为与预期不符。
[注:这是我第一次打开问题,我不熟悉 C++ 或使用 VS(我在重新编译时得到了很多帮助!),我还在学习 Python——我希望OpenCV 团队将支持像我这样的 Python 最终用户访问跟踪算法参数,即使他们别无选择,只能 Windows。 :-) 谢谢。]
【问题讨论】:
标签: python c++ windows opencv opencv-contrib