我正在用C ++编写一个使用OpenCV的项目。 我有4个Vertragon顶点的坐标存储在Point2f的向量中。 我想访问这个tetragon的所有像素(以检查其区域中黑色像素的百分比)。
任何想法怎么做?
P.S。这个四边形不是一个矩形 - 这将是一块蛋糕。
修改 为了清楚起见:我想遍历tetragon内部的每个像素(由4个顶点给出)来访问其RGB值。
答案 0 :(得分:1)
我不确定我是否理解你的问题。
但要找到四边形内的区域,找到四边形的轮廓并用不同的颜色填充它,然后找到具有该颜色的像素数。这样你就可以获得百分比。
或者您可以使用时刻的方法来查找该区域。或者尝试以下链接:
http://tech.groups.yahoo.com/group/OpenCV/message/58943 http://tech.groups.yahoo.com/group/OpenCV/message/44428
如果你想访问tetragon的每个像素,首先你可以找到它的轮廓并尝试“cvGetSeqElem”函数。请尝试以下链接获取一些代码:
http://osdir.com/ml/lib.opencv/2006-04/msg00044.html http://comments.gmane.org/gmane.comp.lib.opencv/15170
请告诉我是否误解了这个问题。
答案 1 :(得分:1)
这种操作类似于栅格化,例如在OpenGL中用于绘制实际多边形,因此FYI有关栅格化的任何信息也可以帮助您。使用OpenGL进行栅格化会更有效,因为显卡只有硬件,但由于你的问题是关于OpenCV,让我们使用OpenCV中可用的功能。
首先,我们将使用顶点调用cvFillConvexPoly()或cvFillPoly()来创建蒙版图像,然后我们可以调用您想要在原始图像和蒙版上使用的任何函数。这样,当在像素上循环时,我们只需要考虑其对应的掩码值不为零的像素。
答案 2 :(得分:1)
我认为你应该做一些解析几何。你可以把你的四边形视为两个三角形的组合。制作连接两个未连接点的虚线。然后,您可以使用围绕它的3条线的方程计算三角形上的点。
答案 3 :(得分:0)
也许你可以将四边形划分为两个三角形并使用三角形栅格化算法来解决问题。以下内容可以帮助你TriangleRasterization link