首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用颜色模型可视化光流

用颜色模型可视化光流
EN

Stack Overflow用户
提问于 2015-03-06 20:01:20
回答 3查看 10.3K关注 0票数 8

我已经实现了一个密集的光流算法,我想用下面的颜色模型来可视化它

(颜色表示某点的流动方向,强度表示位移矢量的长度)

我实现了一个下流版本的可视化

代码语言:javascript
复制
def visualizeFlow(u, v):
    colorModel = cv2.imread('../colormodel.png')
    colorModelCenter = (colorModel.shape[0]/2, colorModel.shape[1]/2)
    res = np.zeros((u.shape[0], u.shape[1], 3), dtype=np.uint8)
    mag = np.max(np.sqrt(u**2 + v**2)) 
    if mag == 0:
        return res, colorModel
    for i in xrange(res.shape[0]):
        for j in xrange(res.shape[1]):
            res[i, j] = colorModel[
                        colorModelCenter[0] + (v[i, j]/mag*colorModelCenter[0]),
                        colorModelCenter[1] + (u[i, j]/mag*colorModelCenter[1])
                    ]
    return res, colorModel

它在一般情况下会产生很好的图片,但速度非常慢

所以我的问题是,有没有人能帮我更快地实现可视化?如果有人知道一种更好的方法来可视化密集流,这可能很酷

EN

回答 3

Stack Overflow用户

发布于 2018-04-04 01:59:56

来自OpenCV's tutorial的代码

代码语言:javascript
复制
import cv2
import numpy as np

# Use Hue, Saturation, Value colour model 
hsv = np.zeros(im1.shape, dtype=np.uint8)
hsv[..., 1] = 255

mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])
hsv[..., 0] = ang * 180 / np.pi / 2
hsv[..., 2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_MINMAX)
bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imshow("colored flow", bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()

票数 14
EN

Stack Overflow用户

发布于 2015-11-17 05:46:15

如果你使用opencv提供的函数,你的代码会运行得更快。光流可视化的工作原理如下:

  • 将u和v运动分量矩阵变换为极坐标。应用cartToPolar函数(x数组=u数组,y数组=v数组)将得到运动矢量的角度和幅度矩阵。

最终的颜色可视化可以通过HSV到RGB的逆变换来找到,其中角度矩阵对应于色调(H)通道,而幅度对应于饱和度(S),值(V)被设置为最大值。(在您的示例中,值通道和饱和度通道被交换)。

  • 使用带有标志CV_HSV2BGRmergemixChannels.
  • Apply cvtColor将幅度、角度和填充为1的矩阵合并到CV_32FC3通道矩阵。注意角度矩阵是以度为单位的,必须重新缩放以适应I 0,1,这可以通过使用例如MinMaxLoc

将其除以幅度的最大值来实现

票数 3
EN

Stack Overflow用户

发布于 2020-12-01 22:00:42

您可能需要检查一下非常棒的flow_vis包。引用their page

  1. pip install flow_vis

然后在您的代码中使用

代码语言:javascript
复制
import flow_vis
flow_color = flow_vis.flow_to_color(flow_uv, convert_to_bgr=False)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28898346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档