OpenCV 中的光流颜色图

Posted

技术标签:

【中文标题】OpenCV 中的光流颜色图【英文标题】:Optical Flow Color Map in OpenCV 【发布时间】:2013-12-23 05:40:06 【问题描述】:

我正在尝试使用 farneback 方法在 OpenCV 中计算和显示密集光流。我找到了一个使用 CUDA 函数来生成它并显示我用作自己代码基础的颜色图的示例。 光流计算:

calcOpticalFlowFarneback(prevgray, gray, flow, 0.5, 3, 15, 3, 5, 1.2, 0);
drawField(flow,cflow);
imshow("flows",cflow);

显示功能:

void drawField(const Mat& flow, Mat& imgColor)
Mat imgColorHSV = cv::Mat::zeros(Size(imgColor.cols,imgColor.rows),CV_32FC3);

float max_s = 0;
float *hsv_ptr;
unsigned char *color_ptr;
unsigned char r = 0, g = 0, b = 0;
float angle = 0.0;
float h = 0.0, s = 0.0, v = 0.0;
float deltaX = 0.0, deltaY = 0.0;
int x = 0, y = 0;

for(y=0;y<imgColor.rows;y++)

    for(x=0;x<imgColor.cols;x++)
    
        const Point2f& fxy=flow.at<Point2f>(y,x);
        deltaX=fxy.x;
        deltaY=fxy.y;
        angle=atan2(deltaX,deltaY);

        if(angle<0)
            angle+=2*M_PI;

        hsv_ptr[3*x]=angle*180/M_PI;
        hsv_ptr[3*x+1]=sqrt(deltaX*deltaX+deltaY*deltaY);
        hsv_ptr[3*x+2]=0.9;

        if(hsv_ptr[3*x+1]>max_s)
            max_s=hsv_ptr[3*x+1];
    


for(y=0;y<imgColor.rows;y++)

    hsv_ptr=imgColorHSV.ptr<float>(y);
    color_ptr=imgColor.ptr<unsigned char>(y);

    for(x=0;x<imgColor.cols;x++)
    
        h=hsv_ptr[3*x];
        s=hsv_ptr[3*x+1]/max_s;
        v=hsv_ptr[3*x+2];

        hsv2rgb(h,s,v,r,g,b);

        color_ptr[3*x]=b;
        color_ptr[3*x+1]=g;
        color_ptr[3*x+2]=r;
    


drawLegendHSV(imgColor,15,25,15);

问题是编译器每次到达imshow时都会抛出异常。

Unhandled exception at at 0x757A4B32 in advection2.exe: Microsoft C++ exception: cv::Exception at memory location 0x00ADF4C8.

监视窗口显示

flow    identifier "flow" is undefined

非常感谢任何帮助/替代解决方案。

【问题讨论】:

【参考方案1】:

错误是您忘记在第一个 for 循环中将 hsv_ptr 设置为 imgColorHSV 数据指针。要将 HSV 应用到 RGB 转换,您可以使用 OpenCV 函数 cvColor

【讨论】:

以上是关于OpenCV 中的光流颜色图的主要内容,如果未能解决你的问题,请参考以下文章

python中的openCV光流

详解OpenCV中的Lucas Kanade稀疏光流单应追踪器

OpenCV 中的 Lucas-Kanade 光流对我不起作用

OpenCV 的 Lucas-Kanade 光流代码中的“good_new = p1[st==1]”是啥意思

OpenCV4中DIS光流算法与应用

安装torch-opencv