【发布时间】:2017-12-16 18:35:46
【问题描述】:
我正在使用 OpenCV 用 C++ 编写一个项目。 我将四边形的 4 个顶点的坐标存储在 Point2f 的向量中。 我想访问这个四边形的所有像素(检查其区域中黑色像素的百分比)。
有什么办法吗?
附:这个四边形不是长方形——那是小菜一碟。
编辑: 为了清楚起见:我想遍历四边形内的每个像素(由 4 个顶点给出)以访问其 RGB 值。
【问题讨论】:
我正在使用 OpenCV 用 C++ 编写一个项目。 我将四边形的 4 个顶点的坐标存储在 Point2f 的向量中。 我想访问这个四边形的所有像素(检查其区域中黑色像素的百分比)。
有什么办法吗?
附:这个四边形不是长方形——那是小菜一碟。
编辑: 为了清楚起见:我想遍历四边形内的每个像素(由 4 个顶点给出)以访问其 RGB 值。
【问题讨论】:
这种操作类似于光栅化,例如在 OpenGL 中用于绘制实际多边形,因此仅供参考,任何有关光栅化的信息也可以帮助您。使用 OpenGL 进行光栅化会更有效,因为显卡具有专门的硬件,但由于您的问题是关于 OpenCV,让我们使用 OpenCV 中可用的函数。
首先,我们会使用您的顶点调用 cvFillConvexPoly() 或 cvFillPoly() 来创建蒙版图像,然后我们可以调用您有兴趣在原始图像和蒙版上使用的任何函数。这样,在对像素进行循环时,我们只需要考虑对应掩码值不为零的像素即可。
【讨论】:
我不确定我是否正确理解了您的问题。
但是要找到四边形内部的区域,请找到四边形的轮廓并用不同的颜色填充它,然后找到具有该颜色的像素数。这样你就可以得到百分比。
或者您可以使用矩方法来查找该区域。或尝试以下链接:
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
如果误解了问题,请告诉我。
【讨论】:
我认为你应该做一些解析几何。您可以将四边形视为两个三角形的组合。制作一条连接它们未连接的两点的虚拟线。然后,您可以使用围绕它的 3 条线的方程计算三角形上的点。
【讨论】:
也许你可以将四边形分成两个三角形,并使用三角形光栅化算法来解决这个问题。下面可能会帮助你TriangleRasterization link
【讨论】: