如何仅将光流矢量应用于检测到的圆

Posted

技术标签:

【中文标题】如何仅将光流矢量应用于检测到的圆【英文标题】:how to apply optical flow vector to detected circle only 【发布时间】:2016-01-28 10:20:44 【问题描述】:

我正在从事交通标志检测项目。圆形交通标志已被检测到,现在我想只计算交通标志的光流矢量,而不是整个图像。 我可以找到检测到的圆的半径,但不确定如何使用它来创建圆形掩码 IplImage 以提供给 "cvGoodFeatureToTrack""cvCalcOpticalFlowPyrLK()"

有什么建议吗?

【问题讨论】:

不要使用 IplImage* 或任何已弃用的 cv* 函数,但使用 c++ api(cv::Mat 等) 我同意,但项目从一开始就是在不推荐使用的 cv* 函数中开发的。所以现在不能切换... 【参考方案1】:

假设你有交通标志的中心和半径,即:

cv::Point center(200, 300);
int radius = 50;

goodFeaturesToTrack 将起作用的感兴趣区域可以由与输入图像大小相同的CV_8UC1 掩码控制:

cv::Mat mask = cv::Mat::zeros(grayFrame.size(), CV_8UC1);
cv::circle(mask, center, radius, cv::Scalar::all(255), -1);

最后根据交通标志用我们的新掩码填充 255s 调用函数:

cv::goodFeaturesToTrack(grayFrame, corners, 100, 0.01, 10, mask);

【讨论】:

以上是关于如何仅将光流矢量应用于检测到的圆的主要内容,如果未能解决你的问题,请参考以下文章

如何使用matlab检测螺旋光流?

在光流路径场周围创建一个边界框

Matlab 光流组件到复矢量场

运动目标检测——光流法与opencv代码实现

如何仅将 CSS 过渡应用于 transform 属性

如何仅将 CSS 样式应用于文本