Я обрабатываю видео с использованием OpenCV 2.4.6. Когда я запускаю свои алгоритмы обработки видео, видео обрабатывается должным образом, однако при отображении каждого кадра после обработки происходит значительная задержка. Например, 10 секундное видео становится 18 секунд после добавления обработки. Мне нужна эта обработка для реального времени, как я могу улучшить процесс? ThanksОбработка видео с помощью OpenCV Частота кадров
Mat preProcess(Mat source){
Mat grad_x, grad_y, grad_dif;
Mat abs_grad_x, abs_grad_y;
Mat src_gray, float_gray;
Mat temp;
GaussianBlur(source, grad_x, Size(1,1),0,0,BORDER_DEFAULT);
GaussianBlur(source, grad_y, Size(3,3),0,0,BORDER_DEFAULT);
grad_dif = grad_x - grad_y;
cvtColor(grad_dif, src_gray, CV_RGB2GRAY);
src_gray.convertTo(float_gray, CV_32F, 1.0/255.0);
GaussianBlur(float_gray, grad_x, Size(0,0), 2, 2);
abs_grad_x = float_gray - grad_x;
GaussianBlur(abs_grad_x.mul(abs_grad_x), grad_x, Size(0,0), 10, 10);
pow(grad_x, 0.5, grad_y);
float_gray = grad_x/grad_y;
normalize(float_gray, temp, 0, 255, NORM_MINMAX, CV_8UC1);
threshold(temp,temp,13,255,3);
return temp;
}
/** @function main */
int main(int argc, char** argv)
{
VideoCapture cap("ijv4.mp4"); // open the video file for reading
Rect myROI(160,20,350,380);
if (!cap.isOpened()) // if not success, exit program
{
cout << "Cannot open the video file" << endl;
return -1;
}
double fps = cap.get(CV_CAP_PROP_FPS); //get the frames per seconds of the video
cout << "Frame per seconds : " << fps << endl;
namedWindow("MyVideo",CV_WINDOW_AUTOSIZE); //create a window called "MyVideo"
Mat frame;
bool bSuccess;
while(1)
{
bSuccess = cap.read(frame); // read a new frame from video
if (!bSuccess) //if not success, break loop
{
cout << "Cannot read the frame from video file" << endl;
break;
}
grad = preProcess(frame(myROI));
imshow("MyVideo", frame); //show the frame in "MyVideo" window
imshow("processed",grad);
if(waitKey(30) == 27)
{
cout << "esc key is pressed by user" << endl;
break;
}
}
return 0;
}
спасибо. Если я удалю значение, видео не будет отображаться в окне. Он показывает пустое окно (я думаю, что изменение слишком быстро, чтобы правильно отображать его, если оно удалено). Если я уменьшу значение, в общем случае все еще немного отставание, хотя оно намного лучше, чем раньше. – mohikhsan
waitkey должен считать некоторое значение, поэтому waitkey (1) сделает его быстрым. – alternatefaraz