Я начинаю изучать OpenCV, но у меня есть некоторые трудности с пониманием последнего аргумента (двойное значение) этой функцииOpenCV: понимание функции cvsetcaptureproperty и аргумент
int cvSetCaptureProperty(CvCapture* capture, int property_id, double value)
Я понимаю, что это propoerty используется в C++, но как работает ли он в коде ниже?
void onTrackSlide(int pos)
{
cvSetCaptureProperty(cap, CV_CAP_PROP_POS_FRAMES, pos);
}
тогда оно называется в основной программе, как это:
cvCreateTrackbar("position", "example3", &slider, frames, onTrackSlide);
Я не понимаю, почему позиция никогда не заполняется или используется в качестве аргумента функции onTrackSlide.
здесь является полная программа:
#include<opencv\cv.h>
#include<opencv\highgui.h>
#include "opencv2/opencv.hpp"
//#include <iostream>
using namespace cv;
int slider=0;
CvCapture* cap = NULL;
void onTrackSlide(int pos)
{
cvSetCaptureProperty(cap, CV_CAP_PROP_POS_FRAMES, pos);
}
int main(int argc, char ** argv)
{
cvNamedWindow("example3", CV_WINDOW_AUTOSIZE);
cap = cvCreateFileCapture(argv[1]);
int frames = (int)cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_COUNT);
if (frames != 0)
{
cvCreateTrackbar("position", "example3", &slider, frames, onTrackSlide);
}
IplImage* frame;
while (1)
{
frame = cvQueryFrame(cap);
if (!frame)break;
cvShowImage("example3", frame);
char c = cvWaitKey(33);
if (c == 27) break;
}
cvReleaseCapture(&cap);
cvDestroyWindow("example3");
}
Вы просто перемещаетесь в видео. Когда вы перемещаете ползунок по значению 'pos', вы перемещаетесь на' pos'-й кадр в видео. – Miki
Да, точно я двигаюсь, я попытался изменить код для функции ниже, переместив int pos в качестве аргумента в ядро функции, но это не сработало, у вас есть идея, почему? void onTrackSlide() { int pos; cvSetCaptureProperty (cap, CV_CAP_PROP_POS_FRAMES, pos); } – saadamiens
Где будет инициализировано «pos» с правильным значением? – Miki