用黑色像素遮盖图像的特定区域

时间:2018-06-30 19:36:45

标签: python r matlab opencv image-processing

我有数百张图像,其中图像的底部包含倾斜的白色/灰色线条。我需要对那条线上方的斑点进行一些斑点检测和跟踪。

我需要替换所有图像帧中斜线上方和下方的所有像素。在所有图像中,线条的位置均相同。 有没有Matlab或python或R的方式来做到这一点。

这是两个示例图像。您可以看到底部有一条斜线。我需要将其替换为黑色像素,并将其下方的所有区域替换为黑色像素。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

该问题同时包含opencvpython标签,因此您可以使用OpenCV中可用的cv2.fillPoly()函数。您将必须传递需要用黑色像素替换的图像的所有像素位置(在阵列中)。

以下是一个小例子:

考虑以下5x5形状的图像:

array([[255, 255, 255, 255, 255],
       [255, 255, 255, 255, 255],
       [255, 255, 255, 255, 255],
       [255, 255, 255, 255, 255],
       [255, 255, 255, 255, 255]])

现在我有一个像素位置数组,需要用pts中的黑色像素替换:

array([[0, 4], [1, 4], [2, 3], [3, 3], [4, 3], 
       [0, 5], [1, 5], [2, 4], [3, 4], [4, 4], 
       [2, 5], [3, 5], [4, 5]])

使用cv2.fillPoly

cv2.fillPoly(a, pts1, 0)

这将返回:

array([[255, 255, 255, 255, 255],
       [255, 255, 255, 255, 255],
       [255, 255, 255, 255, 255],
       [255, 255,   0,   0,   0],
       [  0,   0,   0,   0,   0]])

如果您具有所有必要的像素位置,则可以对图像扩展相同的方法。