python - 在 Python 中从图像中提取每个像素的 x,y 坐标
问题描述
假设我有一个彩色图像,已加载到一个 numpy 尺寸数组(200 x 300 x 3)中。图像中总共有 60,000 个像素。我正在尝试从代表像素 1 的左上角开始提取每个像素的宽度、高度 (x,y) 坐标,这样:
pixel# x y
1 0 0
2 1 0
.
.
301 0 1
302 1 1
.
.
60,000 299 199
我很想使用 for 循环以更手动的方式执行此操作,但是是否有库或更有效的方法来获取每个像素的坐标值?
解决方案
假设我理解您的问题,这是使用 Python/OpenCV 执行此操作的一种非常简单的方法。将图像转换为灰度,然后使用 np.where()。
import cv2
import numpy as np
# create red image
img = np.full((10,10,3), (0,0,255), dtype=np.uint8)
# convert to grayscale
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# get coordinates (y,x) --- alternately see below for (x,y)
yx_coords = np.column_stack(np.where(gray >= 0))
print (yx_coords)
print ('')
# get coordinates (x,y)
xy_coords = np.flip(np.column_stack(np.where(gray >= 0)), axis=1)
print (xy_coords)
(x,y) 的返回值:
[[0 0]
[1 0]
[2 0]
[3 0]
[4 0]
[5 0]
[6 0]
[7 0]
[8 0]
[9 0]
[0 1]
[1 1]
[2 1]
[3 1]
[4 1]
[5 1]
[6 1]
[7 1]
[8 1]
[9 1]
[0 2]
[1 2]
[2 2]
[3 2]
[4 2]
[5 2]
[6 2]
[7 2]
[8 2]
[9 2]
[0 3]
[1 3]
[2 3]
[3 3]
[4 3]
[5 3]
[6 3]
[7 3]
[8 3]
[9 3]
[0 4]
[1 4]
[2 4]
[3 4]
[4 4]
[5 4]
[6 4]
[7 4]
[8 4]
[9 4]
[0 5]
[1 5]
[2 5]
[3 5]
[4 5]
[5 5]
[6 5]
[7 5]
[8 5]
[9 5]
[0 6]
[1 6]
[2 6]
[3 6]
[4 6]
[5 6]
[6 6]
[7 6]
[8 6]
[9 6]
[0 7]
[1 7]
[2 7]
[3 7]
[4 7]
[5 7]
[6 7]
[7 7]
[8 7]
[9 7]
[0 8]
[1 8]
[2 8]
[3 8]
[4 8]
[5 8]
[6 8]
[7 8]
[8 8]
[9 8]
[0 9]
[1 9]
[2 9]
[3 9]
[4 9]
[5 9]
[6 9]
[7 9]
[8 9]
[9 9]]
推荐阅读
- middleware - 已在 .net 5 中发送的标头
- ios - 快速为 uiTextField 添加前缀
- python - 如何根据 Scrapy 中的部分自定义属性名称检索对象?
- xslt-2.0 - Group-adjacent 对所有项目进行分组,而不仅仅是相邻的项目
- typescript - 我可以将类型检查违规从红色错误更改为黄色警告(或其他)吗?
- vba - 尝试制作字符串 ProperCase (VB) 时收到 System.NotSupportedException
- scala - 如何为 scala 宏编写 Intellij IDEA 插件
- javascript - 单击同一个按钮时如何显示或隐藏div?
- microsoft-cognitive - 如何在微软翻译中设置语言偏好?
- tsql - 将多个值插入 SQL 表(类似循环)