gpt4 book ai didi

c++ - cv::goodFeaturesToTrack 不返回任何特征

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:57 25 4
gpt4 key购买 nike

我正在尝试使用 cv::calcOpticalFlowPyrLK但有时该函数中的内部断言会失败。断言是 npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0。我正在使用 OpenCV 2.3.1。此函数的源代码可用 here .

我很难理解他们的代码,尤其是因为我在计算机图形方面的经验有限,而且他们缺乏评论。为什么会触发此断言?它对我的问题有何说明?

编辑:我调用函数如下:

cv::calcOpticalFlowPyrLK(curBwFrame, prvFrame, features, newFeatures, trackingStatus, errors);

我发现 features vector 是通过调用 cv::goodFeaturesToTrack(curBwFrame, features, 5, 0.2, 0.5, skinMask); 获得的看起来足够大且有效的图像的非空掩码不包含任何特征。怎么会这样?

curBwFrame

curBwFrame

皮肤面膜

skinMask

我可以使用以下代码片段重现该问题:

#include <vector>
#include <cassert>
#include <opencv2\opencv.hpp>
using std::vector;
using namespace cv;

int main() {
vector<Point2f> features;
cv::Mat curBwFrame = imread("curBwFrame.png");
cv::cvtColor(curBwFrame, curBwFrame, CV_RGB2GRAY);
imwrite("test.png", curBwFrame);

cv::Mat skinMask = imread("skinMask.png");
cv::cvtColor(skinMask, skinMask, CV_RGB2GRAY);
imwrite("test.png", skinMask);

cv::goodFeaturesToTrack(curBwFrame, features, 5, 0.2, 0.5, skinMask);
assert(features.size() > 0);

return 0;
}

最佳答案

主要问题是你的参数。在OpenCV 2.3.2 documentation (2.3.1 之间没有兼容性变化)这是方法参数的描述:

void goodFeaturesToTrack(InputArray image, OutputArray corners, int maxCorners, double qualityLevel, double minDistance, InputArray mask=noArray(), int blockSize=3, bool useHarrisDetector=false, double k=0.04 )

参数:

  • 图像 – 输入 8 位或浮点 32 位、单 channel 图像。
  • corners – 检测到的角点的输出 vector 。
  • maxCorners – 返回的最大角数。如果还有更多比被发现的角落,他们中最强的被返回。
  • qualityLevel – 表征最低可接受质量的参数的图像角落。参数值乘以最佳拐角质量度量,这是最小特征值(见cornerMinEigenVal() ) 或 Harris 函数响应(参见角落哈里斯())。质量测量值小于产品被拒绝。例如,如果最好的角落有质量measure = 1500, and the qualityLevel=0.01 , 然后所有的角低于 15 的质量指标被拒绝。
  • minDistance – 之间可能的最小欧氏距离返回角落。
  • mask – 可选的感兴趣区域。如果图像不为空(它需要具有 CV_8UC1 类型和与 image 相同的大小),它指定检测角点的区域。
  • blockSize – 用于计算导数的平均 block 的大小每个像素邻域的协方差矩阵。看cornerEigenValsAndVecs() 。
  • useHarrisDetector – 指示是否使用 Harris 的参数检测器(参见 cornerHarris())或 cornerMinEigenVal()。
  • k – Harris 检测器的自由参数。

我建议您尝试使用 qualityLevel 和 minDistance 来满足您的需求。

关于c++ - cv::goodFeaturesToTrack 不返回任何特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com