光流法OPenCV

更新时间:2023-06-20 20:53:48 阅读: 评论:0

/* --Spar Optical Flow Demo Program--
* Written by David Stavens (david.stavens@ai.stanford.edu)
*/
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include <math.h>
static const double pi = 3.14159265358979323846;
inline static double square(int a)
{
    return a * a;
exco
}
同等学力考试成绩查询
/* This is just an inline that allocates images.  I did this to reduce clutter in the
mrp * actual computer vision algorithmic code.  Basically it allocates the requested image
* unless that image is already non-NULL.  It always leaves a non-NULL image as-is even
* if that image's size, depth, and/or channels are different than the request.
*/
inline static void allocateOnDemand( IplImage **img, CvSize size, int depth, int channels )
{
    if ( *img != NULL )    return;
    *img = cvCreateImage( size, depth, channels );
    if ( *img == NULL )
    {
        fprintf(stderr, "Error: Couldn't allocate image.  Out of memory?\n");
        exit(-1);
    }
}
int main(void)
{
    /* Create an object that decodes the input video stream. */
    CvCapture *input_video = cvCaptureFromFile(
        "C:\\Documents and Settings\\David Stavens\\Desktop\\223B-Demo\\optical_flow_input.avi"
        );
    if (input_video == NULL)
    {
        /* Either the video didn't exist OR it us a codec OpenCV
        * doesn't support.
        */
        fprintf(stderr, "Error: Can't open video.\n");
        return -1;
    }
    /* Read the video's frame size out of the AVI. */
    CvSize frame_size;
    frame_size.height =
        (int) cvGetCaptureProperty( input_video, CV_CAP_PROP_FRAME_HEIGHT );
    frame_size.width =
        (int) cvGetCaptureProperty( input_video, CV_CAP_PROP_FRAME_WIDTH );
    /* Determine the number of frames in the AVI. */
    long number_of_frames;
    /* Go to the end of the AVI (ie: the fraction is "1") */
    cvSetCaptureProperty( input_video, CV_CAP_PROP_POS_AVI_RATIO, 1. );
    /* Now that we're at the end, read the AVI position in frames */
    number_of_frames = (int) cvGetCaptureProperty( input_video, CV_CAP_PROP_POS_FRAMES );
    /* Return to the beginning */
    cvSetCaptureProperty( input_video, CV_CAP_PROP_POS_FRAMES, 0. );
    /* Create a windows called "Optical Flow" for visualizing the output.
    * Have the window automatically change its size to match the output.
    */
    cvNamedWindow("Optical Flow", CV_WINDOW_AUTOSIZE);
    long current_frame = 0;
    while(true)
    {
        static IplImage *frame = NULL, *frame1 = NULL, *frame1_1C = NULL, *frame2_1C = NULL, *eig_image = NULL, *temp_image = NULL, *pyramid1 = NULL, *pyramid2 = NULL;
        /* Go to the frame we want.  Important if multiple frames are queried in
        * the loop which they of cour are for optical flow.  Note that the very
rasputin
        * first call to this is actually not needed. (Becau the correct positionbro
        * is t outsite the for() loop.)
        */
        cvSetCaptureProperty( input_video, CV_CAP_PROP_POS_FRAMES, current_frame );
        /* Get the next frame of the video.
        * IMPORTANT!  cvQueryFrame() always returns a pointer to the _same_
        * memory location.  So successive calls:
        * frame1 = cvQueryFrame();
        * frame2 = cvQueryFrame();
        * frame3 = cvQueryFrame();
        * will result in (frame1 == frame2 && frame2 == frame3) being true.
        * The solution is to make a copy of the cvQueryFrame() output.
        */
        frame = cvQueryFrame( input_video );
        if (frame == NULL)
echoes        {
            /* Why did we get a NULL frame?  We shouldn't be at the end. */
            fprintf(stderr, "Error: Hmm. The end came sooner than we thought.\n");
学日文
            return -1;
        }
        /* Allocate another image if not already allocated.
        * Image has ONE channel of color (ie: monochrome) with 8-bit "color" depth.
        * This is the image format OpenCV algorithms actually operate on (mostly).
        */
offer是什么意思        allocateOnDemand( &frame1_1C, frame_size, IPL_DEPTH_8U, 1 );
thematrix        /* Convert whatever the AVI image format is into OpenCV's preferred format.
        * AND flip the image vertically.  Flip is a shameless hack.  OpenCV reads
        * in AVIs upside-down by default.  (No comment :-))
        */
        cvConvertImage(frame, frame1_1C, CV_CVTIMG_FLIP);
        /* We'll make a full color backup of this frame so that we can draw on it.
        * (It's not the best idea to draw on the static memory space of cvQueryFrame().)
        */
        allocateOnDemand( &frame1, frame_size, IPL_DEPTH_8U, 3 );
海外留学中介        cvConvertImage(frame, frame1, CV_CVTIMG_FLIP);
        /* Get the cond frame of video.  Same principles as the first. */
        frame = cvQueryFrame( input_video );
        if (frame == NULL)
        {
            fprintf(stderr, "Error: Hmm. The end came sooner than we thought.\n");
            return -1;
        }
        allocateOnDemand( &frame2_1C, frame_size, IPL_DEPTH_8U, 1 );

本文发布于:2023-06-20 20:53:48,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/151824.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图