【问题标题】:How to find out the topmost coordinate point where the pixel value got changed in an image?如何找出图像中像素值发生变化的最高坐标点?
【发布时间】:2018-12-17 11:15:30
【问题描述】:

我有一张图片。使用以下代码在 OpenCV 中使用 Canny 边缘检测后,我得到了一个检测到边缘的二进制图像。

import cv2

img = cv2.imread('Test3.jpg')
canny = cv2.Canny(img, 0, 150)
cv2.imshow('Canny Edge', canny)
cv2.waitKey(0)
cv2.destroyAllWindows()

Original Image Binary Image

现在我想找出像素值发生变化的点的坐标值,从上到下扫描图像。该怎么做??

【问题讨论】:

  • 你应该如何处理同一行的像素?应该选择哪一个?你所说的“改变”是什么意思?二值图像只显示边缘,是从精明的输出中生成的..
  • 我不明白你所说的“价值改变”是什么意思。您正在使用特定算法从现有图像创建新图像。求最高轮廓像素的坐标吗?
  • 圆角还是矩形角?
  • 从顶部开始迭代每一行并在第一行找到任何单个白色像素时中断,然后找到该像素在该行中的位置以获得所需点的坐标。

标签: python opencv matplotlib image-processing


【解决方案1】:

要查找非零像素,可以使用numpy函数nonzero

import numpy as np
x = np.array([[1, 0, 0], [0, 1, 0], [1, 1, 0]])
coords = np.nonzero(x)
print(coords)

在您的情况下,只需致电np.nonzero(canny)

会输出

array([0, 1, 2, 2]), array([0, 1, 0, 1]))

然后您可以查询任何维度的最小/最大坐标值,例如

np.max(coords[0])

【讨论】:

  • 我想找出最顶层/全局最大值(坐标)点。不像我预期的那样准确的答案。然而,这也有助于解决我的问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2021-05-31
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
相关资源
最近更新 更多