Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在TrackerCSRT上使用setInitialMask?_Python_Opencv - Fatal编程技术网

Python 如何在TrackerCSRT上使用setInitialMask?

Python 如何在TrackerCSRT上使用setInitialMask?,python,opencv,Python,Opencv,我正在使用TrackerCSRT进行视频中的对象跟踪,目前我在跟踪器上使用init方法设置感兴趣的区域 tracker = cv2.TrackerCSRT_create() tracker.init(frame, region_of_interest) 感兴趣的区域包括我的对象,但也包括与背景或其他对象无关的像素 我想用一个遮罩来细化我感兴趣的像素。查看文档,我可以看到方法,但在Python包装器中找不到等效的方法 如何在openCV上的trackersrt中为Python设置掩码?我不知道s

我正在使用
TrackerCSRT
进行视频中的对象跟踪,目前我在跟踪器上使用init方法设置感兴趣的
区域

tracker = cv2.TrackerCSRT_create()
tracker.init(frame, region_of_interest)
感兴趣的区域包括我的对象,但也包括与背景或其他对象无关的像素

我想用一个遮罩来细化我感兴趣的像素。查看文档,我可以看到方法,但在
Python
包装器中找不到等效的方法


如何在
openCV
上的
trackersrt
中为
Python
设置掩码?

我不知道
setInitialMask
但在Python中,您可以使用
cv2.selectROI()
方法选择感兴趣的区域


A以一步一步的方式随附相关代码。

目前,您不能。但是,如果您准备重建OpenCV,就可以这样做

创建OpenCV C++模块的Python绑定是由C++文件中的标记控制的,如文档所示。在编写本文时,没有导致为其创建Python绑定的标记,因此无法访问。我认为这是因为TrackerCSRT实现只有几个月的历史,Python绑定将随着它的成熟而发展

但是,如果您准备在系统上重建OpenCV(如果您以前没有这样做过,这可能会有点困难),那么从Python访问setInitialMask()应该非常简单,只需将CV_WRAP宏添加到该声明中(如上述文档中所述)并重建即可

网上有很多关于如何构建OpenCV的指南,但由于我自己已经有一段时间没有这样做了,而且这些方法有点依赖于平台,所以我不推荐使用


希望这有帮助。

不幸的是,你不能

只是补充@ CujgZuWala回答,跟踪器C++代码只使用掩码,如果设置“代码> PARAMS”。USEL分段< /COD>,但跟踪器Python接口不允许设置PARAMS。 我做了一个修改,以支持对Python和Java使用cv::TrackerCSRT::setInitialMask()

此外,下面的python代码可能对使用params很有用

tracker = cv2.TrackerCSRT_create()
tracker.save("default_csrt.xml") // saves default values of the Tracker
                                    you can rename default_csrt.xml-> custom_csrt.xml 
                                    and change values in it and use it load params

fs = cv2.FileStorage("custom_csrt.xml",cv2.FILE_STORAGE_READ)
fn = fs.getFirstTopLevelNode()
tracker.read(fn)

默认情况下,params.use_segmentation为true。您可以在我的回答中看到设置参数的方法。