Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Opencv Python中查找位掩码中的最高点_Python_Opencv_Image Processing_Opencv Python - Fatal编程技术网

在Opencv Python中查找位掩码中的最高点

在Opencv Python中查找位掩码中的最高点,python,opencv,image-processing,opencv-python,Python,Opencv,Image Processing,Opencv Python,我有一个对象的按位掩码,我想从中检测它的最高点。如何使用OpenCV Python实现这一点 我的面具 预期结果 假设图像如下所示: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 1为白色,0为黑色。 假设这个numpy数组被称为mask。 让我们打印形状: import numpy as np print(mask.shape) 应该给你 (5,9) 在

我有一个对象的按位掩码,我想从中检测它的最高点。如何使用OpenCV Python实现这一点

我的面具 预期结果
假设图像如下所示:

0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 1 1 1 0 0 0
0 1 1 1 1 1 1 0 0
1为白色,0为黑色。 假设这个numpy数组被称为
mask
。 让我们打印形状:

import numpy as np
print(mask.shape)
应该给你

(5,9) 
在这种情况下,您应该得到
(image\u width,image\u height)

然后,我们将首先检查是否有任何行是完全黑色的,或者有一些像素是白色的,带有
np。any
,它会这样做:'对于
轴上的每一行
,是否有不是0的“any”值?如果是,则为该行返回True,否则为该行返回False'。因此:

has_white = print(np.any(mask, axis=1))
屈服

array([False, False, True, True, True])
2
因此,每行都有一个
True/False

现在我们取最小值,因为它是图像中的最高行:

np.argmin(has_white)
屈服

array([False, False, True, True, True])
2

这是从上到下计数的索引,黑色=
False
和白色=
True
,类似于:
np.argmin(np.any(mask,axis=1),axis=0)
取数组中包含白色像素的最高行(您可能需要翻转数组或根据定义数组的方式更改
轴)这不需要OpenCV中的特殊函数。只要找到第一条不是完全黑色的线。@FrederikBode我真的不明白你的意思,你能不能把它作为一个答案传递给我,我很乐意接受它。我们如何在图像中将它标记为一条线,输出是0我知道如何画一条线,但我们如何用它来做呢?这没有给出任何坐标或任何东西最后的值
2=result\u i
是y坐标,你可以通过
np.argmin(mask[result\u i,:])获得x坐标。
(取该行最左边的白色像素)似乎有问题,我的x,y值只有0,0知道为什么会发生这种情况吗?