OpenCV在轮廓边界内获得黑色像素

时间:2012-07-04 00:22:07

标签: android image-processing opencv pixel

我目前正在尝试检索轮廓边界内存在的所有黑色像素。我对轮廓边界不感兴趣,而是对位于边界内的黑色像素构成实际图像。如果我能得到图像的实际坐标,那就太好了。

我尝试过使用带掩码的copyTo方法,但我相信我没有设置正确的参数。虽然,我也尝试使用Core.fillPoly,它只是用命令中指定的颜色填充整个轮廓区域,并且获取像素信息没有帮助。有人可以指导我吗?我正在使用OpenCV 2.3.1开发Android 2.2。

1 个答案:

答案 0 :(得分:4)

有一组像素落在轮廓边界内。还有另一组黑色像素。您希望找到这两组的交集,即在边界内且颜色为黑色的像素集。

要做到这一点,我会:

  1. 将轮廓绘制为填充形状,白色绘制为黑色(在其自己的图像中),以便它是一个蒙版。 您可以使用cv::drawContourscv::fillPoly

  2. 将图像中的黑色像素过滤为另一个蒙版。 您可以将cv::thresholdTHRESH_BINARY_INV一起使用,将阈值设置为零。

  3. 使用bitwise_and&运算符(例如matResult = mat1 & mat2;

  4. 查找相交集

    结果是与图像大小相同的矩阵,仅对于满足轮廓内的标准和图像中的黑色的像素具有非零值。您可以通过循环此矩阵并测试非零值来获取各个坐标。