使用流光法实现物体跟踪

简介

  本篇讲解使用opencv提供的流光法算法接口,实现物体跟踪。范例代码为参考修改tvl1_optical_flow.cpp实现。

具体实现

实现代码

<span class="co2" style="color: rgb(51, 153, 51);">#include <iostream></span>
<span class="co2" style="color: rgb(51, 153, 51);">#include <fstream></span>
 
<span class="co2" style="color: rgb(51, 153, 51);">#include "opencv2/video/tracking.hpp"</span>
<span class="co2" style="color: rgb(51, 153, 51);">#include "opencv2/highgui/highgui.hpp"</span>
 
using namespace cv<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
using namespace std<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
<span class="kw2" style="font-weight: bold;">inline</span> bool isFlowCorrect<span class="br0" style="color: rgb(0, 153, 0);">(</span>Point2f u<span class="br0" style="color: rgb(0, 153, 0);">)</span>
<span class="br0" style="color: rgb(0, 153, 0);">{</span>
    <span class="kw1" style="color: rgb(177, 177, 0);">return</span> <span class="sy0" style="color: rgb(51, 153, 51);">!</span>cvIsNaN<span class="br0" style="color: rgb(0, 153, 0);">(</span>u.<span class="me1" style="color: rgb(32, 32, 32);">x</span><span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">&&</span> <span class="sy0" style="color: rgb(51, 153, 51);">!</span>cvIsNaN<span class="br0" style="color: rgb(0, 153, 0);">(</span>u.<span class="me1" style="color: rgb(32, 32, 32);">y</span><span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">&&</span> <span class="kw3" style="color: rgb(0, 0, 102);">fabs</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>u.<span class="me1" style="color: rgb(32, 32, 32);">y</span><span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);"><</span> <span class="nu19" style="color: rgb(128, 0, 128);">1e9</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
<span class="br0" style="color: rgb(0, 153, 0);">}</span>
 
<span class="kw4" style="color: rgb(153, 51, 51);">static</span> Vec3b computeColor<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">float</span> fx<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="kw4" style="color: rgb(153, 51, 51);">float</span> fy<span class="br0" style="color: rgb(0, 153, 0);">)</span>
<span class="br0" style="color: rgb(0, 153, 0);">{</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">static</span> bool first <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="kw2" style="font-weight: bold;">true</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
    <span class="co1" style="color: rgb(102, 102, 102); font-style: italic;">// relative lengths of color transitions:</span>
    <span class="co1" style="color: rgb(102, 102, 102); font-style: italic;">// these are chosen based on perceptual similarity</span>
    <span class="co1" style="color: rgb(102, 102, 102); font-style: italic;">// (e.g. one can distinguish more shades between red and yellow</span>
    <span class="co1" style="color: rgb(102, 102, 102); font-style: italic;">//  than between yellow and green)</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">int</span> RY <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">15</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">int</span> YG <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">6</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">int</span> GC <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">4</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">int</span> CB <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">11</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">int</span> BM <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">13</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">int</span> MR <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">6</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">int</span> NCOLS <span class="sy0" style="color: rgb(51, 153, 51);">=</span> RY <span class="sy0" style="color: rgb(51, 153, 51);">+</span> YG <span class="sy0" style="color: rgb(51, 153, 51);">+</span> GC <span class="sy0" style="color: rgb(51, 153, 51);">+</span> CB <span class="sy0" style="color: rgb(51, 153, 51);">+</span> BM <span class="sy0" style="color: rgb(51, 153, 51);">+</span> MR<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">static</span> Vec3i colorWheel<span class="br0" style="color: rgb(0, 153, 0);">[</span>NCOLS<span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
    <span class="kw1" style="color: rgb(177, 177, 0);">if</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>first<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span>
        <span class="kw4" style="color: rgb(153, 51, 51);">int</span> k <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
        <span class="kw1" style="color: rgb(177, 177, 0);">for</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> i <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> i <span class="sy0" style="color: rgb(51, 153, 51);"><</span> RY<span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>k<span class="br0" style="color: rgb(0, 153, 0);">)</span>
            colorWheel<span class="br0" style="color: rgb(0, 153, 0);">[</span>k<span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> Vec3i<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">255</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> i <span class="sy0" style="color: rgb(51, 153, 51);">/</span> RY<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
        <span class="kw1" style="color: rgb(177, 177, 0);">for</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> i <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> i <span class="sy0" style="color: rgb(51, 153, 51);"><</span> YG<span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>k<span class="br0" style="color: rgb(0, 153, 0);">)</span>
            colorWheel<span class="br0" style="color: rgb(0, 153, 0);">[</span>k<span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> Vec3i<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">255</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> i <span class="sy0" style="color: rgb(51, 153, 51);">/</span> YG<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
        <span class="kw1" style="color: rgb(177, 177, 0);">for</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> i <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> i <span class="sy0" style="color: rgb(51, 153, 51);"><</span> GC<span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>k<span class="br0" style="color: rgb(0, 153, 0);">)</span>
            colorWheel<span class="br0" style="color: rgb(0, 153, 0);">[</span>k<span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> Vec3i<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> i <span class="sy0" style="color: rgb(51, 153, 51);">/</span> GC<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
        <span class="kw1" style="color: rgb(177, 177, 0);">for</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> i <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> i <span class="sy0" style="color: rgb(51, 153, 51);"><</span> CB<span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>k<span class="br0" style="color: rgb(0, 153, 0);">)</span>
            colorWheel<span class="br0" style="color: rgb(0, 153, 0);">[</span>k<span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> Vec3i<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> i <span class="sy0" style="color: rgb(51, 153, 51);">/</span> CB<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
        <span class="kw1" style="color: rgb(177, 177, 0);">for</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> i <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> i <span class="sy0" style="color: rgb(51, 153, 51);"><</span> BM<span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>k<span class="br0" style="color: rgb(0, 153, 0);">)</span>
            colorWheel<span class="br0" style="color: rgb(0, 153, 0);">[</span>k<span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> Vec3i<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">255</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> i <span class="sy0" style="color: rgb(51, 153, 51);">/</span> BM<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
        <span class="kw1" style="color: rgb(177, 177, 0);">for</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> i <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> i <span class="sy0" style="color: rgb(51, 153, 51);"><</span> MR<span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>k<span class="br0" style="color: rgb(0, 153, 0);">)</span>
            colorWheel<span class="br0" style="color: rgb(0, 153, 0);">[</span>k<span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> Vec3i<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">255</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> i <span class="sy0" style="color: rgb(51, 153, 51);">/</span> MR<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
        first <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="kw2" style="font-weight: bold;">false</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="br0" style="color: rgb(0, 153, 0);">}</span>
 
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">float</span> rad <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="kw3" style="color: rgb(0, 0, 102);">sqrt</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>fx <span class="sy0" style="color: rgb(51, 153, 51);">*</span> fx <span class="sy0" style="color: rgb(51, 153, 51);">+</span> fy <span class="sy0" style="color: rgb(51, 153, 51);">*</span> fy<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">float</span> a <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="kw3" style="color: rgb(0, 0, 102);">atan2</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">-</span>fy<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span>fx<span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">/</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">float</span><span class="br0" style="color: rgb(0, 153, 0);">)</span>CV_PI<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">float</span> fk <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>a <span class="sy0" style="color: rgb(51, 153, 51);">+</span> <span class="nu17" style="color: rgb(128, 0, 128);">1.0f</span><span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">/</span> <span class="nu17" style="color: rgb(128, 0, 128);">2.0f</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>NCOLS <span class="sy0" style="color: rgb(51, 153, 51);">-</span> <span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">int</span> k0 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> static_cast<span class="sy0" style="color: rgb(51, 153, 51);"><</span>int<span class="sy0" style="color: rgb(51, 153, 51);">></span><span class="br0" style="color: rgb(0, 153, 0);">(</span>fk<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">int</span> k1 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>k0 <span class="sy0" style="color: rgb(51, 153, 51);">+</span> <span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">%</span> NCOLS<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">float</span> f <span class="sy0" style="color: rgb(51, 153, 51);">=</span> fk <span class="sy0" style="color: rgb(51, 153, 51);">-</span> k0<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
    Vec3b pix<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
    <span class="kw1" style="color: rgb(177, 177, 0);">for</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> b <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> b <span class="sy0" style="color: rgb(51, 153, 51);"><</span> <span class="nu0" style="color: rgb(0, 0, 221);">3</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> b<span class="sy0" style="color: rgb(51, 153, 51);">++</span><span class="br0" style="color: rgb(0, 153, 0);">)</span>
    <span class="br0" style="color: rgb(0, 153, 0);">{</span>
        <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">float</span> col0 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> colorWheel<span class="br0" style="color: rgb(0, 153, 0);">[</span>k0<span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">[</span>b<span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">/</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span>.<span class="me1" style="color: rgb(32, 32, 32);">f</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
        <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">float</span> col1 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> colorWheel<span class="br0" style="color: rgb(0, 153, 0);">[</span>k1<span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">[</span>b<span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">/</span> <span class="nu0" style="color: rgb(0, 0, 221);">255</span>.<span class="me1" style="color: rgb(32, 32, 32);">f</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
        <span class="kw4" style="color: rgb(153, 51, 51);">float</span> col <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span> f<span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> col0 <span class="sy0" style="color: rgb(51, 153, 51);">+</span> f <span class="sy0" style="color: rgb(51, 153, 51);">*</span> col1<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
        <span class="kw1" style="color: rgb(177, 177, 0);">if</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>rad <span class="sy0" style="color: rgb(51, 153, 51);"><=</span> <span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">)</span>
            col <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">1</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span> rad <span class="sy0" style="color: rgb(51, 153, 51);">*</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span> col<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="co1" style="color: rgb(102, 102, 102); font-style: italic;">// increase saturation with radius</span>
        <span class="kw1" style="color: rgb(177, 177, 0);">else</span>
            col <span class="sy0" style="color: rgb(51, 153, 51);">*=</span> <span class="nu18" style="color: rgb(128, 0, 128);">.75</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="co1" style="color: rgb(102, 102, 102); font-style: italic;">// out of range</span>
 
        pix<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span> b<span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> static_cast<span class="sy0" style="color: rgb(51, 153, 51);"><</span>uchar<span class="sy0" style="color: rgb(51, 153, 51);">></span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">255</span>.<span class="me1" style="color: rgb(32, 32, 32);">f</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> col<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    <span class="br0" style="color: rgb(0, 153, 0);">}</span>
 
    <span class="kw1" style="color: rgb(177, 177, 0);">return</span> pix<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
<span class="br0" style="color: rgb(0, 153, 0);">}</span>
 
<span class="kw4" style="color: rgb(153, 51, 51);">static</span> <span class="kw4" style="color: rgb(153, 51, 51);">void</span> drawOpticalFlow<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">const</span> Mat_<span class="sy0" style="color: rgb(51, 153, 51);"><</span>Point2f<span class="sy0" style="color: rgb(51, 153, 51);">>&</span> flow<span class="sy0" style="color: rgb(51, 153, 51);">,</span> Mat<span class="sy0" style="color: rgb(51, 153, 51);">&</span> dst<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="kw4" style="color: rgb(153, 51, 51);">float</span> maxmotion <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">)</span>
<span class="br0" style="color: rgb(0, 153, 0);">{</span>
    dst.<span class="me1" style="color: rgb(32, 32, 32);">create</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>flow.<span class="me1" style="color: rgb(32, 32, 32);">size</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> CV_8UC3<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
    dst.<span class="me1" style="color: rgb(32, 32, 32);">setTo</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>Scalar<span class="sy0" style="color: rgb(51, 153, 51);">::</span><span class="me2" style="color: rgb(32, 32, 32);">all</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
    <span class="co1" style="color: rgb(102, 102, 102); font-style: italic;">// determine motion range:</span>
    <span class="kw4" style="color: rgb(153, 51, 51);">float</span> maxrad <span class="sy0" style="color: rgb(51, 153, 51);">=</span> maxmotion<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
    <span class="kw1" style="color: rgb(177, 177, 0);">if</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>maxmotion <span class="sy0" style="color: rgb(51, 153, 51);"><=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">)</span>
    <span class="br0" style="color: rgb(0, 153, 0);">{</span>
        maxrad <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
        <span class="kw1" style="color: rgb(177, 177, 0);">for</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> y <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> y <span class="sy0" style="color: rgb(51, 153, 51);"><</span> flow.<span class="me1" style="color: rgb(32, 32, 32);">rows</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>y<span class="br0" style="color: rgb(0, 153, 0);">)</span>
        <span class="br0" style="color: rgb(0, 153, 0);">{</span>
            <span class="kw1" style="color: rgb(177, 177, 0);">for</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> x <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> x <span class="sy0" style="color: rgb(51, 153, 51);"><</span> flow.<span class="me1" style="color: rgb(32, 32, 32);">cols</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>x<span class="br0" style="color: rgb(0, 153, 0);">)</span>
            <span class="br0" style="color: rgb(0, 153, 0);">{</span>
                Point2f u <span class="sy0" style="color: rgb(51, 153, 51);">=</span> flow<span class="br0" style="color: rgb(0, 153, 0);">(</span>y<span class="sy0" style="color: rgb(51, 153, 51);">,</span> x<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
                <span class="kw1" style="color: rgb(177, 177, 0);">if</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">!</span>isFlowCorrect<span class="br0" style="color: rgb(0, 153, 0);">(</span>u<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span>
                    <span class="kw1" style="color: rgb(177, 177, 0);">continue</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
                maxrad <span class="sy0" style="color: rgb(51, 153, 51);">=</span> max<span class="br0" style="color: rgb(0, 153, 0);">(</span>maxrad<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="kw3" style="color: rgb(0, 0, 102);">sqrt</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>u.<span class="me1" style="color: rgb(32, 32, 32);">x</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> u.<span class="me1" style="color: rgb(32, 32, 32);">x</span> <span class="sy0" style="color: rgb(51, 153, 51);">+</span> u.<span class="me1" style="color: rgb(32, 32, 32);">y</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> u.<span class="me1" style="color: rgb(32, 32, 32);">y</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
            <span class="br0" style="color: rgb(0, 153, 0);">}</span>
        <span class="br0" style="color: rgb(0, 153, 0);">}</span>
    <span class="br0" style="color: rgb(0, 153, 0);">}</span>
 
    <span class="kw1" style="color: rgb(177, 177, 0);">for</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> y <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> y <span class="sy0" style="color: rgb(51, 153, 51);"><</span> flow.<span class="me1" style="color: rgb(32, 32, 32);">rows</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>y<span class="br0" style="color: rgb(0, 153, 0);">)</span>
    <span class="br0" style="color: rgb(0, 153, 0);">{</span>
        <span class="kw1" style="color: rgb(177, 177, 0);">for</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> x <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> x <span class="sy0" style="color: rgb(51, 153, 51);"><</span> flow.<span class="me1" style="color: rgb(32, 32, 32);">cols</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="sy0" style="color: rgb(51, 153, 51);">++</span>x<span class="br0" style="color: rgb(0, 153, 0);">)</span>
        <span class="br0" style="color: rgb(0, 153, 0);">{</span>
            Point2f u <span class="sy0" style="color: rgb(51, 153, 51);">=</span> flow<span class="br0" style="color: rgb(0, 153, 0);">(</span>y<span class="sy0" style="color: rgb(51, 153, 51);">,</span> x<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
            <span class="kw1" style="color: rgb(177, 177, 0);">if</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>isFlowCorrect<span class="br0" style="color: rgb(0, 153, 0);">(</span>u<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span>
                dst.<span class="me1" style="color: rgb(32, 32, 32);">at</span><span class="sy0" style="color: rgb(51, 153, 51);"><</span>Vec3b<span class="sy0" style="color: rgb(51, 153, 51);">></span><span class="br0" style="color: rgb(0, 153, 0);">(</span>y<span class="sy0" style="color: rgb(51, 153, 51);">,</span> x<span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> computeColor<span class="br0" style="color: rgb(0, 153, 0);">(</span>u.<span class="me1" style="color: rgb(32, 32, 32);">x</span> <span class="sy0" style="color: rgb(51, 153, 51);">/</span> maxrad<span class="sy0" style="color: rgb(51, 153, 51);">,</span> u.<span class="me1" style="color: rgb(32, 32, 32);">y</span> <span class="sy0" style="color: rgb(51, 153, 51);">/</span> maxrad<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
        <span class="br0" style="color: rgb(0, 153, 0);">}</span>
    <span class="br0" style="color: rgb(0, 153, 0);">}</span>
<span class="br0" style="color: rgb(0, 153, 0);">}</span>
 
<span class="kw4" style="color: rgb(153, 51, 51);">int</span> main<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> argc<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">char</span><span class="sy0" style="color: rgb(51, 153, 51);">*</span> argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span>
<span class="br0" style="color: rgb(0, 153, 0);">{</span>
	Mat frame0<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	Mat frame1<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	Mat_<span class="sy0" style="color: rgb(51, 153, 51);"><</span>Point2f<span class="sy0" style="color: rgb(51, 153, 51);">></span> flow<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	Ptr<span class="sy0" style="color: rgb(51, 153, 51);"><</span>DenseOpticalFlow<span class="sy0" style="color: rgb(51, 153, 51);">></span> tvl1 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> createOptFlow_DualTVL1<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	Mat out<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
	<span class="kw1" style="color: rgb(177, 177, 0);">if</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>argc <span class="sy0" style="color: rgb(51, 153, 51);"><</span> <span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span>
		cerr <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> <span class="st0" style="color: rgb(255, 0, 0);">"Usage : "</span> <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> <span class="st0" style="color: rgb(255, 0, 0);">"<video>"</span> <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> endl<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
		<span class="kw1" style="color: rgb(177, 177, 0);">return</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	<span class="br0" style="color: rgb(0, 153, 0);">}</span>
	VideoCapture cap<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	cap.<span class="me1" style="color: rgb(32, 32, 32);">open</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
	<span class="kw1" style="color: rgb(177, 177, 0);">while</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span>
		cap <span class="sy0" style="color: rgb(51, 153, 51);">>></span> frame0<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
		<span class="kw1" style="color: rgb(177, 177, 0);">if</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>frame0.<span class="me1" style="color: rgb(32, 32, 32);">empty</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span>
			cerr<span class="sy0" style="color: rgb(51, 153, 51);"><<</span> <span class="st0" style="color: rgb(255, 0, 0);">"video is over!!"</span> <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> endl<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
			<span class="kw2" style="font-weight: bold;">break</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
		<span class="br0" style="color: rgb(0, 153, 0);">}</span>
		cvtColor<span class="br0" style="color: rgb(0, 153, 0);">(</span>frame0<span class="sy0" style="color: rgb(51, 153, 51);">,</span> frame0<span class="sy0" style="color: rgb(51, 153, 51);">,</span> CV_BGR2GRAY<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
		<span class="kw1" style="color: rgb(177, 177, 0);">if</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">!</span>frame1.<span class="me1" style="color: rgb(32, 32, 32);">empty</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span>
			<span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">double</span> start <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">double</span><span class="br0" style="color: rgb(0, 153, 0);">)</span>getTickCount<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
			tvl1<span class="sy0" style="color: rgb(51, 153, 51);">-></span>calc<span class="br0" style="color: rgb(0, 153, 0);">(</span>frame0<span class="sy0" style="color: rgb(51, 153, 51);">,</span> frame1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> flow<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
			<span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">double</span> timeSec <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>getTickCount<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span> start<span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">/</span> getTickFrequency<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
			cout <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> <span class="st0" style="color: rgb(255, 0, 0);">"calcOpticalFlowDual_TVL1 : "</span> <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> timeSec <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> <span class="st0" style="color: rgb(255, 0, 0);">" sec"</span> <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> endl<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
			drawOpticalFlow<span class="br0" style="color: rgb(0, 153, 0);">(</span>flow<span class="sy0" style="color: rgb(51, 153, 51);">,</span> out<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
			imshow<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="st0" style="color: rgb(255, 0, 0);">"out"</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> out<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
			imshow<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="st0" style="color: rgb(255, 0, 0);">"src"</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> frame0<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
			waitKey<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">10</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
		<span class="br0" style="color: rgb(0, 153, 0);">}</span>
		frame0.<span class="me1" style="color: rgb(32, 32, 32);">copyTo</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>frame1<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	<span class="br0" style="color: rgb(0, 153, 0);">}</span>
    waitKey<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
    <span class="kw1" style="color: rgb(177, 177, 0);">return</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
<span class="br0" style="color: rgb(0, 153, 0);">}</span>

代码讲解

  1、创建了一个DenseOpticalFlow实例,同时获得打开了需要跟踪处理的video视频到cap中。
        Ptr<span class="sy0" style="color: rgb(51, 153, 51);"><</span>DenseOpticalFlow<span class="sy0" style="color: rgb(51, 153, 51);">></span> tvl1 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> createOptFlow_DualTVL1<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	Mat out<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
 
	<span class="kw1" style="color: rgb(177, 177, 0);">if</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>argc <span class="sy0" style="color: rgb(51, 153, 51);"><</span> <span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span>
		cerr <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> <span class="st0" style="color: rgb(255, 0, 0);">"Usage : "</span> <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> <span class="st0" style="color: rgb(255, 0, 0);">"<video>"</span> <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> endl<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
		<span class="kw1" style="color: rgb(177, 177, 0);">return</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	<span class="br0" style="color: rgb(0, 153, 0);">}</span>
	VideoCapture cap<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	cap.<span class="me1" style="color: rgb(32, 32, 32);">open</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
  2、在循环中,不断的读取video的帧数据到frame0中,接着cvtColor将frame0中的数据,灰阶化。判断到存储前一帧数据为空,也就是表示
刚刚读取到第一帧数据时候,不进入处理函数中,直接跳过。最后将frame0中的帧数据,保存到frame1中。frame0进入下一次循环,获得新一帧
数据。
     <span class="kw1" style="color: rgb(177, 177, 0);">while</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span>
	cap <span class="sy0" style="color: rgb(51, 153, 51);">>></span> frame0<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	<span class="kw1" style="color: rgb(177, 177, 0);">if</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>frame0.<span class="me1" style="color: rgb(32, 32, 32);">empty</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span>
		cerr<span class="sy0" style="color: rgb(51, 153, 51);"><<</span> <span class="st0" style="color: rgb(255, 0, 0);">"video is over!!"</span> <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> endl<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
		<span class="kw2" style="font-weight: bold;">break</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	<span class="br0" style="color: rgb(0, 153, 0);">}</span>
	cvtColor<span class="br0" style="color: rgb(0, 153, 0);">(</span>frame0<span class="sy0" style="color: rgb(51, 153, 51);">,</span> frame0<span class="sy0" style="color: rgb(51, 153, 51);">,</span> CV_BGR2GRAY<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	<span class="kw1" style="color: rgb(177, 177, 0);">if</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">!</span>frame1.<span class="me1" style="color: rgb(32, 32, 32);">empty</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span>
                ...........
                ...........
	<span class="br0" style="color: rgb(0, 153, 0);">}</span>
	frame0.<span class="me1" style="color: rgb(32, 32, 32);">copyTo</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>frame1<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
     <span class="br0" style="color: rgb(0, 153, 0);">}</span>
  3、当检测到frame1保存了前一帧数据之后,进入到流光法计算中。首先获得当前时钟getTickCount。使用tvl1->calc分别传入当前
帧(frame0)和前一帧(frame1),将获得的位置偏移保存到flow中。接着计算出calc函数处理花费的时间,之后使用函数 
drawOpticalFlow,利用flow中的位置偏移,根据偏移位置的方向和速度,从而在out图像,对应位置赋予不同的颜色和饱和度。最后将
当前帧图像和处理之后的out图像分别显示出来。
        <span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">double</span> start <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">double</span><span class="br0" style="color: rgb(0, 153, 0);">)</span>getTickCount<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	tvl1<span class="sy0" style="color: rgb(51, 153, 51);">-></span>calc<span class="br0" style="color: rgb(0, 153, 0);">(</span>frame0<span class="sy0" style="color: rgb(51, 153, 51);">,</span> frame1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> flow<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	<span class="kw4" style="color: rgb(153, 51, 51);">const</span> <span class="kw4" style="color: rgb(153, 51, 51);">double</span> timeSec <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>getTickCount<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span> start<span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">/</span> getTickFrequency<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	cout <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> <span class="st0" style="color: rgb(255, 0, 0);">"calcOpticalFlowDual_TVL1 : "</span> <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> timeSec <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> <span class="st0" style="color: rgb(255, 0, 0);">" sec"</span> <span class="sy0" style="color: rgb(51, 153, 51);"><<</span> endl<span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	drawOpticalFlow<span class="br0" style="color: rgb(0, 153, 0);">(</span>flow<span class="sy0" style="color: rgb(51, 153, 51);">,</span> out<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	imshow<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="st0" style="color: rgb(255, 0, 0);">"out"</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> out<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	imshow<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="st0" style="color: rgb(255, 0, 0);">"src"</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> frame0<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
	waitKey<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">10</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>

效果演示

 对应的效果演示如下:
        
    
        
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值