C++ opencv 通过get(CAP_PROP_POS_FRAMES)获知帧的帧数current。想要重新显示这一帧,是否需要将current-1?
时间: 2023-11-27 20:51:35 浏览: 23
是的,如果你想重新显示当前帧,需要将 `current-1` 才能正确地设置帧的位置。因为在 OpenCV 中,帧的位置是从零开始的,而 `get(CAP_PROP_POS_FRAMES)` 返回的是当前帧的索引,因此需要将其减去1才能得到正确的帧位置。可以使用以下代码重新设置帧位置并显示当前帧:
```c++
// 获取当前帧索引
int currentFrame = cap.get(CAP_PROP_POS_FRAMES);
// 设置帧位置为当前帧的前一帧
cap.set(CAP_PROP_POS_FRAMES, currentFrame - 1);
// 读取并显示当前帧
Mat frame;
cap.read(frame);
imshow("Current Frame", frame);
```
相关问题
CV_CAP_PROP_POS_FRAMES在opencv4.6变成啥了
CV_CAP_PROP_POS_FRAMES 是 OpenCV 中的一个常量,用于指定视频文件中的帧位置。在 OpenCV 4.6 版本中,CV_CAP_PROP_POS_FRAMES 常量被重命名为 cv::CAP_PROP_POS_FRAMES。
因此,如果您的代码中使用了 CV_CAP_PROP_POS_FRAMES 常量,您需要将其替换为 cv::CAP_PROP_POS_FRAMES。例如,如果您的代码中有以下语句:
```
cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, frame_number);
```
您需要将其修改为:
```
cv::setCaptureProperty(capture, cv::CAP_PROP_POS_FRAMES, frame_number);
```
这样就可以在 OpenCV 4.6 版本中使用该代码了。
CV_CAP_PROP_POS_FRAMES函数在opencv4.6中变成什么了
在 OpenCV 4.6 中,`CV_CAP_PROP_POS_FRAMES` 已经被弃用,取而代之的是 `cv::CAP_PROP_POS_FRAMES`。它是一个 `cv::VideoCapture` 类的属性常量,用于设置或获取视频帧的位置。可以使用以下代码获取当前帧的位置:
```
cv::VideoCapture cap("video.mp4");
int current_frame = cap.get(cv::CAP_PROP_POS_FRAMES);
```
这将创建一个 `cv::VideoCapture` 对象,并使用 `get` 函数获取当前帧的位置。您还可以使用 `set` 函数设置帧的位置:
```
cap.set(cv::CAP_PROP_POS_FRAMES, 100); // 将帧位置设置为 100
```
这将将帧位置设置为第 100 帧。使用 `cv::VideoCapture` 对象的 `read` 函数可以按顺序读取视频帧。