Cd0*_*d01 2 python opencv numpy image image-processing
我正在尝试找到一种方法来读取任何 any .png、.jpgor .tiff,并返回该图像中所有黑色或灰色像素的坐标。
我正在考虑有一个特定的灰色阈值,并写出比该阈值更暗的每个像素的坐标。然而,我不确定如何管理读取图像的方面。我的目标是让结果成为图像中所有黑色像素的列表,如下所示:
[x 坐标,y 坐标,黑色]
我研究过使用它cv.imread来读出像素的坐标,但据我所知,它的工作方式与我想要的方式完全相反 - 它以坐标作为参数,并返回 RGB 值。有人有让这项工作有效的技巧/方法吗?
对于任何有类似问题的人,我使用下面的答案解决了这个问题,然后我使用 将 numpy 数组转换为列表np.ndarray.tolist()。此外,由于我只得到了结果的截断版本,因此我使用了:
import sys
np.set_printoptions(threshold=sys.maxsize)
现在使用索引打印列表中的任何元素都很简单。
nat*_*ncy 10
您可以使用np.column_stack()+ np.where()。其想法是将图像转换为灰度,然后找到低于特定阈值的所有像素的坐标。请注意,在灰度中,图像有一个带有像素值的通道[0 ... 255]
使用此输入图像threshold_level = 20

我们将低于此阈值水平的所有像素着色为蓝色

所有像素坐标都可以从掩模中确定np.where(),并使用 堆叠成(x, y)格式np.column_stack()。这里是所有低于阈值的像素坐标
coords = np.column_stack(np.where(gray < threshold_level))
Run Code Online (Sandbox Code Playgroud)
[[ 88 378]
[ 89 378]
[ 90 378]
...
[474 479]
[474 480]
[474 481]]
Run Code Online (Sandbox Code Playgroud)
和threshold_level = 50:

[[ 21 375]
[ 22 375]
[ 23 376]
...
[474 681]
[474 682]
[474 683]]
Run Code Online (Sandbox Code Playgroud)
代码
import cv2
import numpy as np
image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Set threshold level
threshold_level = 50
# Find coordinates of all pixels below threshold
coords = np.column_stack(np.where(gray < threshold_level))
print(coords)
# Create mask of all pixels lower than threshold level
mask = gray < threshold_level
# Color the pixels in the mask
image[mask] = (204, 119, 0)
cv2.imshow('image', image)
cv2.waitKey()
Run Code Online (Sandbox Code Playgroud)
使用您的输入图像和threshold_level = 10

[[ 59 857]
[ 59 858]
[ 59 859]
...
[1557 859]
[1557 860]
[1557 861]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13766 次 |
| 最近记录: |