【问题标题】:Converting matches from 8-bit 4 channels to 64-bit 1 channel in OpenCV在 OpenCV 中将匹配从 8 位 4 通道转换为 64 位 1 通道
【发布时间】:2014-07-18 11:36:47
【问题描述】:

我有一个vectorPoint2f 有颜色空间CV_8UC4 并且需要将它们转换为CV_64F,下面的代码是否正确?

points1.convertTo(points1, CV_64F);

更多详情:

我正在尝试使用这个函数通过 5 点算法来计算本质矩阵(旋转/平移),而不是使用 OpenCV 中包含的基于 8 点算法的 findFundamentalMath:

https://github.com/prclibo/relative-pose-estimation/blob/master/five-point-nister/five-point.cpp#L69

如您所见,它首先将图像转换为CV_64F。我的输入图像是CV_8UC4BGRA 图像。当我测试这个函数时,BGRA 和灰度图像都从数学的角度产生了有效的矩阵,但是如果我传递的是灰度图像而不是颜色,则需要更多的计算时间。这让我觉得在这两种情况之一中我没有正确地做某事。

我读到过,当色彩空间的变化不是线性的(我想在这种情况下,当你从 4 个通道变为 1 个通道时就是这种情况),你应该标准化强度值。那是对的吗?我应该给这个函数哪个输入?

另外注意,在我的代码中函数是这样调用的:

vector<Point2f>imgpts1, imgpts2;

for (vector<DMatch>::const_iterator it = matches.begin(); it!= matches.end(); ++it)
{
  imgpts1.push_back(firstViewFeatures.second[it->queryIdx].pt);
  imgpts2.push_back(secondViewFeatures.second[it->trainIdx].pt);
}

Mat mask;
Mat E = findEssentialMat(imgpts1, imgpts2, [camera focal], [camera principal_point], CV_RANSAC, 0.999, 1, mask);

事实上我没有传递Mat,而是传递Point2fvector,这似乎没有造成任何问题,因为它可以正确编译和执行。

是否应该将匹配项存储在Mat 中?

【问题讨论】:

    标签: opencv color-space


    【解决方案1】:

    我不确定你是指某个颜色空间中的 Point2f 向量,但如果你想将点向量转换为另一种类型的点向量,你可以使用任何标准 C++/STL 函数,例如 copy(),赋值() 或插入()。例如:

    copy(floatPoints.begin(), floatPoints.end(), doublePoints.begin());
    

    doublePoints.insert(doublePoints.end(), floatPoints.begin(), floatPoints.end());
    

    【讨论】:

    • 这并不是我想知道的这个问题。请查看更新。
    【解决方案2】:

    不,不是。 std::vector&lt;cv::Pointf2f&gt; 不能使用 OpenCV 的 convertTo 函数。

    我认为你的意思是你有一个CV_8UC4 类型的cv::Mat points1。请注意,这些是 RxCx4 值(即 RC 行数和列数),并且在 CV_64F 矩阵中您将只有 RxC 值。因此,您需要更清楚地了解如何转换这些值。

    您可以通过points1.convertTo(points1, CV_64FC4) 获得RxCx4 矩阵。

    更新:

    更新问题后的一些评论:

    请注意,vector&lt;cv::Point2f&gt; 是与任何特定颜色空间无关的 2D 点向量,它们只是图像轴上的坐标。因此,它们代表灰色、rgb 或 hsv 图像中的相同 2D 点。然后,findEssentialMat 的执行时间不依赖于图像色彩空间。不过,获得积分可能会。

    也就是说,我认为您对findEssentialMat 的输入是可以的(该函数负责处理向量并将它们转换为它们的内部表示)。在这种情况下,在图像中绘制点以调试代码非常有用。

    【讨论】:

    • 我在问题中添加了更多细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多