我已将此作为问题发布在 GitHub opencv_contrib 上,但尚未收到任何回复。
系统信息(版本)- OpenCV => 4.2.0
- 操作系统/平台 => Windows 10、64 位
- 编译器 => Visual Studio 16 2019
- Python => 3.7.6,使用 Anaconda
我想在 Windows 上使用 Python 中的 Tracker 类,似乎在 Python 中访问算法参数的唯一方法是向 .yaml 文件写入/读取 Tracker 对象。当我尝试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。:-) 谢谢。]