opencv如何读取多边形区域内的像素值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv如何读取多边形区域内的像素值?相关的知识,希望对你有一定的参考价值。
多变形区域是在原图上画出来的,现在不知道怎么读取所选的多边形区域内的像素值
有几个方法:1,将轮廓数据通过drawContours画到一张图像上,遍历图像,逐一判断点是否在多边形内。使用pointPolygonTest函数。
2,将轮廓数据通过drawContours(参数中要选择填充模式,颜色白色)画到一张黑色图片上,填充颜色为白色,使用countNonZero找到图片中的非零像素数。注意边界条件,可能最后的结果需要减去轮廓长度(如果轮廓和内部颜色一致的话,我理解的轮廓边缘的点不算轮廓内)。
PS:DrawContours:在图像上绘制外部和内部轮廓,函数DrawContours用于在图像上绘制外部和内部轮廓。当thickness >= 0 时,绘制轮廓线;否则填充由轮廓包围的部分。 参考技术A 多边形区域一般是放在cvseq里的
cvseq可以转为cvpoint类型,包含组成多边形的每个像素点的位置
你可以根据每个像素点的位置判断图像像素位置是否在多边形内,然后再读取 参考技术B 好高端
使用 openCV 读取复选框
【中文标题】使用 openCV 读取复选框【英文标题】:Reading checkboxes with openCV 【发布时间】:2012-01-23 00:40:53 【问题描述】:我在一个 android 应用程序上使用 opencv 库。从相机拍摄的图像中,我想读取一个复选框(我已经有了复选框的位置),并查看该复选框是否已被填充。即我想知道复选框内的区域是否部分或完全填充了暗像素。
我使用的是 jni 接口,所以我使用的是 c++ 语言。我想知道如何在复选框中找到这些像素的值,以便我知道大多数复选框都填充了暗(黑色)像素。
【问题讨论】:
当您说“我已经有了复选框的位置”时,是否意味着您知道中心/角/等的像素坐标及其(像素)大小? 如果您尝试访问像素值,请尝试this SO。 如果复选框的状态有不同的颜色/表示怎么办?比如红点表示未选中,绿点表示选中? 【参考方案1】:如果您知道完整表单的外观,假设您在某处存储了它的图像。然后我们可以使用特征点来检测该形式的另一个实例作为相机图像内的平面对象,如find_obj.cpp sample 所示。 locatePlanarObject() 函数实际上为我们提供了一个单应矩阵,我们可以直接将其与 cvWarpPerspective() 一起使用,以将捕获的图像变形回以与您存储的图像匹配。假设您知道复选框在存储图像中的位置,我们可以简单直接地比较像素值。 “暗”像素数量的某种阈值应该适用于 IMO。
哦,我想您想了解更多有关如何访问像素值的信息。这在很多地方都有介绍,例如:Pixel access in OpenCV 2.2
【讨论】:
以上是关于opencv如何读取多边形区域内的像素值?的主要内容,如果未能解决你的问题,请参考以下文章