Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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 开始从特定帧读取视频_Python_Opencv_Image Processing_Hsv - Fatal编程技术网

Python 开始从特定帧读取视频

Python 开始从特定帧读取视频,python,opencv,image-processing,hsv,Python,Opencv,Image Processing,Hsv,我已获得已保存视频的帧数 self.frame_count = self.capture.get(cv.CV_CAP_PROP_FRAME_COUNT) - 1 现在,我想从一个特定的帧计数开始读取一帧。我该怎么做 原因:我需要跟踪一个对象,并且我已经使用HSV图像分割找到了要跟踪的对象的位置。现在要跟踪它,我打算从那个特定的帧开始视频,并将跟踪窗口设置为对象的坐标 想要:它不应该是冗余的和计算密集型的 尝试以下操作: f=#将要开始的帧放在这里 自我捕获设置(CV\U CAP\U PROP\

我已获得已保存视频的帧数

self.frame_count = self.capture.get(cv.CV_CAP_PROP_FRAME_COUNT) - 1
现在,我想从一个特定的帧计数开始读取一帧。我该怎么做

原因:我需要跟踪一个对象,并且我已经使用HSV图像分割找到了要跟踪的对象的位置。现在要跟踪它,我打算从那个特定的帧开始视频,并将跟踪窗口设置为对象的坐标

想要:它不应该是冗余的和计算密集型的

尝试以下操作:

f=#将要开始的帧放在这里
自我捕获设置(CV\U CAP\U PROP\U POS\U框架,f)
当f
使用以下代码完成任务

您使用的Opencv版本很旧。使用Opencv2
链接:


我希望这是您想要的代码。

对于OpenCV Python的任何版本3和4,请遵循以下步骤-

import cv2
# suppose you want to start reading from frame no 500
frame_set_no = 500 
cap = cv2.VideoCapture("full_path/cow.mp4")
 
# capture is set to the desired frame
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_set_no)

while True:
  ret, frame = cap.read()
  cv2.imshow("Video", frame)
  if cv2.waitKey(1) & 0xFF == ord('q'):
    break
cv2.destroyAllWindows()

我有这样的想法,但这是太密集的计算。因为它需要读取“不需要的”帧,直到找到正确的帧。我想要一个最佳的方法。在使用
read()开始阅读之前,使用
capture.Set(CV\u CAP\u PROP\u POS\u FRAMES,frame)设置下一个要捕获的帧
@tilaprimera我已经根据之前的回答修改了答案comment@tilaprimera刚刚看到你的编辑在评论队列中弹出,因为对原始答案的更改太大而被拒绝,所以我将在这里发布更改。更改了两行:
self.capture.set(CV\u CAP\u PROP\u POS\u FRAMES,f)
而f
@tilaprimera当编辑出现在审阅队列中时,我们看不到注释,因此我们不知道您和wolfrevo正在合作改进答案。这是一个小的编辑,但因为它改变了帖子的含义,它被归类为“彻底的改变”。)最好的解决方法是使用类似的服务或共享代码示例!我确实使用cv2接口。再次感谢您精心编写的代码。我要对我的代码进行大量编辑,以确定它是否真的有效。所以以后会有更多的更新。我也在使用python opencv2创建跟踪对象的代码。我对此有些怀疑。我可以知道您的电子邮件id以询问相关问题吗?我想你可以在这里提问,也可以在这里发帖。我自己就是一个傻瓜。:)
import cv2
# suppose you want to start reading from frame no 500
frame_set_no = 500 
cap = cv2.VideoCapture("full_path/cow.mp4")
 
# capture is set to the desired frame
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_set_no)

while True:
  ret, frame = cap.read()
  cv2.imshow("Video", frame)
  if cv2.waitKey(1) & 0xFF == ord('q'):
    break
cv2.destroyAllWindows()