【问题标题】:opencv-access all pixels in tetragonopencv-访问四边形中的所有像素
【发布时间】:2017-12-16 18:35:46
【问题描述】:

我正在使用 OpenCV 用 C++ 编写一个项目。 我将四边形的 4 个顶点的坐标存储在 Point2f 的向量中。 我想访问这个四边形的所有像素(检查其区域中黑色像素的百分比)。

有什么办法吗?

附:这个四边形不是长方形——那是小菜一碟。

编辑: 为了清楚起见:我想遍历四边形内的每个像素(由 4 个顶点给出)以访问其 RGB 值。

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    这种操作类似于光栅化,例如在 OpenGL 中用于绘制实际多边形,因此仅供参考,任何有关光栅化的信息也可以帮助您。使用 OpenGL 进行光栅化会更有效,因为显卡具有专门的硬件,但由于您的问题是关于 OpenCV,让我们使用 OpenCV 中可用的函数。

    首先,我们会使用您的顶点调用 cvFillConvexPoly() 或 cvFillPoly() 来创建蒙版图像,然后我们可以调用您有兴趣在原始图像和蒙版上使用的任何函数。这样,在对像素进行循环时,我们只需要考虑对应掩码值不为零的像素即可。

    【讨论】:

    • 所以你的意思是我应该创建与我的工作图像完全一样的其他图像大小,并且这一切都以白色为例,然后调用 cvFillPoly() 来创建四边形的黑色蒙版。然后遍历图像的每个像素以查找它是否是黑色的——这就是我如何在四边形中获取每个像素。我没听错吗?
    • OpenCV 函数使用黑色背景和白色前景的蒙版,所以我们不妨遵循这个约定,但是是的,您的理解是正确的。但这是一个非常笼统的过程,我们能否做得更好取决于您打算对所有这些像素做什么......
    【解决方案2】:

    我不确定我是否正确理解了您的问题。

    但是要找到四边形内部的区域,请找到四边形的轮廓并用不同的颜色填充它,然后找到具有该颜色的像素数。这样你就可以得到百分比。

    或者您可以使用矩方法来查找该区域。或尝试以下链接:

    http://tech.groups.yahoo.com/group/OpenCV/message/58943 http://tech.groups.yahoo.com/group/OpenCV/message/44428

    如果你想访问四边形的每个像素,首先你可以找到它的轮廓并尝试“cvGetSeqElem”函数。尝试以下链接获取一些代码:

    http://osdir.com/ml/lib.opencv/2006-04/msg00044.html http://cmets.gmane.org/gmane.comp.lib.opencv/15170

    如果误解了问题,请告诉我。

    【讨论】:

    • 你已经很明白我的问题了,我需要访问四边形内的每个像素。所以你的第二对链接有点帮助。 cvGetSeqElem 可能会完成这项工作,但是当我只有它的顶点时,如何获得四边形的轮廓?
    • 然后首先使用OpenCV函数绘制多边形。 1)opencv.itseez.com/doc/tutorials/core/basic_geometric_drawing/… 2)opencv.willowgarage.com/documentation/python/… 3)opencv.willowgarage.com/documentation/python/… 然后像往常一样,找到轮廓并使用cvGetSeqElem函数。
    • 我尝试过 findContours 函数,但后来我只遍历四边形的轮廓,而不是其中的像素。在这种情况下你能帮我进一步吗?
    • 它是用 Python 而不是 C++,但我理解你的想法。这与 Samuel Audet 给出的解决方案非常相似。我一直在寻找更复杂、更自动化的东西,但我认为没有其他方法可以做到。
    【解决方案3】:

    我认为你应该做一些解析几何。您可以将四边形视为两个三角形的组合。制作一条连接它们未连接的两点的虚拟线。然后,您可以使用围绕它的 3 条线的方程计算三角形上的点。

    【讨论】:

    • 你误解了这个问题。我不是在寻找四边形的区域,我需要访问其中的每个像素。
    【解决方案4】:

    也许你可以将四边形分成两个三角形,并使用三角形光栅化算法来解决这个问题。下面可能会帮助你TriangleRasterization link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 2011-06-12
      • 1970-01-01
      • 2016-10-21
      • 2014-04-15
      • 2014-04-24
      相关资源
      最近更新 更多