繁体   English   中英

如何找到位置最低的白色像素?

[英]how to find white pixel with lowest location?

我的问题是如何在这张图片的最低点找到一点? 我知道这个点的 x 坐标。 但是,我也想找到那个点的 y 坐标。 在此处输入图片说明

任何意见,将不胜感激。

编辑:以下代码是显示图像中的最低点。

nz = np.argwhere(res)
Y, X = nz[0]

cv2.circle(image, (Y, X ), 2, (0, 0, 255), -1)
cv2.imshow('result',res)
cv2.waitKey()

但问题是运行代码后,该点没有出现在我的原始图像中。

首先,最低点是具有最大 y 的点。 由于 OpenCV 图像存储在y, x, color等数组中,因此您需要找到具有最大第 0 个坐标的点。 看来, numpy.argwhere返回已经排序的结果,但文档并不能保证这一点。

nz = np.argwhere(res)
# to guarantee the sorting. 
nz = list(nz).sort(key=lambda point: point[0])
assert nz, "No white points"

# take the last point, the point with biggest Y
Y, X = nz[-1]

然后是绘图部分。 您的图像是灰度的,因此您尝试在其上绘制的所有点都将以白色绘制。 将无法区分绘制的点,与之前存在的 To draw points 我建议将图像转换为BGR ,并绘制彩色点。

image_color = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
# note the order, (X, Y)
cv2.circle(image_color, (X, Y), 3, (0, 0, 255), -1)
# make sure you show the image, where you have drawn a circle
cv2.imshow('result',image_color)
cv2.waitKey(0)

如果您正在阅读灰度或图像本身是灰度的,我的猜测是:

values = cv2.imread('img',0)
# I am taking greater than 100, as opposed to 255 as the values may not be exactly 255
y_coord = max(np.where(values > 100)[1])

如果您正在使用二进制图像,则将条件替换为values == 1

您可以找到所有非零值的坐标

nz = numpy.argwhere(img)

如果你想要第一个就使用

y, x = nz[0]

如果你想要最后一个然后使用

y, x = nz[-1]

但是,您的图像不是二进制的,并且有许多灰度值,包括“几乎黑色”和“几乎白色”。 “最低点”是什么意思?

例如,要找到大于 128 的第一个值,您可以执行以下操作

y,x = numpy.argwhere(img > 128)[0]

我得到这个输出......

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM