两帧之间的密集光流

Posted

技术标签:

【中文标题】两帧之间的密集光流【英文标题】:Dense optical flow between two frames 【发布时间】:2016-03-30 15:13:12 【问题描述】:

我正在尝试使用 Farneback 方法计算密集光流,但遇到以下错误:error: (-215) scn == 1 && (dcn == 3 || dcn == 4) in function ipp_cvtColor

我的代码:

Mat flow, cflow, frame1,frame2;
UMat gray1,gray2, uflow;
namedWindow("flow", 1);


frame1 = imread("./car1.jpg", IMREAD_COLOR);
frame2 = imread("./car2.jpg", IMREAD_COLOR);

cvtColor(frame1, gray1, COLOR_BGR2GRAY);
cvtColor(frame2, gray2, COLOR_BGR2GRAY);


calcOpticalFlowFarneback(gray2, gray1, uflow, 0.5, 3, 15, 3, 5, 1.2, 0);
cvtColor(frame2, cflow, COLOR_GRAY2BGR);
uflow.copyTo(flow);
drawOptFlowMap(flow, cflow, 16, 1.5, Scalar(0, 255, 0));
imshow("flow", cflow);

【问题讨论】:

【参考方案1】:

泰晤士线

cvtColor(frame2, cflow, COLOR_GRAY2BGR);

可能是罪魁祸首。 在上面的一行中,您使用frame2 = imread("./car2.jpg", IMREAD_COLOR);frame2 加载为彩色图像,但现在您尝试将其从灰色 转换,这似乎不合逻辑。

【讨论】:

error: (-215) size.width>0 && size.height>0 in function imshow 现在发生这种情况... 错误有点神秘地告诉你,你传递给imshowMat 是空的。 IE。它的至少一个维度是零。您可能应该查看您的矩阵,看看哪个矩阵用于何处以及用于什么目的。

以上是关于两帧之间的密集光流的主要内容,如果未能解决你的问题,请参考以下文章

opencv光流法

为啥光流方程定义不足?

光流:时间导数到底是啥?

简单的密集光流程序 calcOpticalFlowFarneback() openCV 3.2 cpp

使用 opencv 在 Python 中实现光流的问题

cv2 Farneback 光流值太低