我正在使用OpenCV在C++中编写项目。 我有四个顶点的坐标存储在Point2f的向量中。 我想访问这个四边形的所有像素(以检查它的区域中黑色像素的百分比是多少)。opencv-access tetragon中的所有像素
任何想法如何做到这一点?
P.S.这个四边形不是一个矩形 - 这将是小菜一碟。
编辑: 为了弄清楚事情:我想遍历四边形内的每个像素(由4个顶点给出)来访问它的RGB值。
我正在使用OpenCV在C++中编写项目。 我有四个顶点的坐标存储在Point2f的向量中。 我想访问这个四边形的所有像素(以检查它的区域中黑色像素的百分比是多少)。opencv-access tetragon中的所有像素
任何想法如何做到这一点?
P.S.这个四边形不是一个矩形 - 这将是小菜一碟。
编辑: 为了弄清楚事情:我想遍历四边形内的每个像素(由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://comments.gmane.org/gmane.comp.lib.opencv/15170
请告诉我,如果误解了这个问题。
你已经很明白我的问题,我需要访问里面的每一个像素tetragon.So第二对你的链接有点帮助。 cvGetSeqElem可能会做的工作,但我只有它的顶点时,我怎么能得到我的四边形轮廓? – Wookie88 2012-01-18 09:20:04
然后首先使用OpenCV函数绘制多边形。 1)http://opencv.itseez.com/doc/tutorials/core/basic_geometric_drawing/basic_geometric_drawing.html 2)http://opencv.willowgarage.com/documentation/python/drawing_functions。html#polyline 3)http://opencv.willowgarage.com/documentation/python/drawing_functions.html#fillpoly然后像往常一样,找到轮廓并使用cvGetSeqElem函数。 – 2012-01-18 14:07:39
我试过findContours函数,但后来我只通过四边形的轮廓,而不是通过其内部的像素迭代。在这种情况下你能帮助我吗? – Wookie88 2012-01-19 21:17:15
我认为你应该做一些解析几何。你可以把你的四角形看作是两个三角形的组合。使连接两点的虚线不连通。然后,可以使用围绕它的3条线的方程来计算三角形上的点。
您误解了这个问题。我不是在寻找我的四边形区域,我需要访问它内部的每个像素。 – Wookie88 2012-01-18 09:07:46
也许你可以将四边形分成两个三角形,并利用三角形光栅算法来解决这个问题.the遵循可以帮助你TriangleRasterization link
所以,你的意思是我应该创建与我的工作图像完全相同的其他图像大小,例如用白色,然后调用cvFillPoly()创建四边形的黑色蒙版。然后遍历图像的每个像素以查找它是否是黑色 - 这就是我如何获取四边形内的每个像素。我对你有正确的理解吗? – Wookie88 2012-01-18 09:05:11
OpenCV函数使用黑色背景和白色前景的蒙版,所以我们不妨遵循该惯例,但是,您的理解是正确的。但这是一个非常普遍的过程,我们是否可以做得更好取决于您打算如何处理所有这些像素...... – 2012-01-18 13:20:42