c++ - 在 DLIB 中通过霍夫变换结果进行过滤

标签 c++ hough-transform dlib

我正在尝试使用来自 DLIB 的 Hough 变换,但只能显示一行。 DLIB 文档中的示例仅使用了一个强项:

point p = max_point(mat(himg));

我怎样才能显示所有强行(超过特定阈值或 N 票最多)?

我试图遍历这些点并屏蔽每个已经找到的点,但是 dlib::max_point 一直在寻找相同的点,尽管它已经被清零了:

for(int i = 0; i < nPoints; ++i){
    dlib::point p = dlib::max_point(dlib::mat(hImg));
    maxPoints.push_back(p);
    std::cout << "Turning point " << p.x() << ", " << p.y() << " = " << hImg[p.x()][p.y()] << std::endl;

    hImg[p.x()][p.y()] = 0;

    std::pair<dlib::point, dlib::point> line = ht.get_line(p);

    dlib::draw_line(temp, line.first+5, line.second+5, dlib::rgb_pixel(255,255,0));
}

在第一次循环迭代后产生相同的值:

Turning point 595, 584 = 78540
Turning point 595, 584 = 0
Turning point 595, 584 = 0

在 DLIB 中是否有通过 hough 空间进行过滤的“正确”方法?

更新: 正如 Davis King 指出的那样,我交换了坐标 (row, col) 与 (x, y) 解决了眼前的问题,但核心问题仍然存在。 我的 hough 空间是这样的:

Hough Image in color for clarity

可以看出,有许多局部最大值,但一切都被中间的巨大 Blob 所支配。我最初的想法是每个模糊区域都可以减少到一个最主要的点

我正在考虑对超过特定阈值的每个点进行聚类,但是遍历整个图像以找到这些点并将找到的点馈送到聚类算法的效率非常低,因此必须有一种更聪明的方法,也许是内边缘可以抑制图像本身的影响(小物体,如不规则的杂乱)?

最佳答案

您交换了行和列。 hImg[p.x()][p.y()] = 0;倒过来,应该是hImg[p.y()][p.x()] = 0;

关于c++ - 在 DLIB 中通过霍夫变换结果进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43472964/

相关文章:

c++ - sizeof(size_t) 可以小于 sizeof(int) 吗?

c++ - 具有两个定界符的字符串流

python - Python:计算X射线中两 block 骨头之间的角度

python - 如何在Dlib中保存带有检测框的图像?

c++ - 如何为每个 XML 节点添加换行符?

python - 指向外部托管的 C++ 智能指针(例如 : Python) resources?

image - 45度线的OpenCV线检测

python-3.x - 为什么 HoughLinesP 输出 3D 数组,而不是 2D 数组?

python - dlib 安装 AWS EC2 实例 Ubuntu 16.04 出错

python - 如何在 OpenCV 窗口中覆盖来自 Dlib 的面部关键点