gpt4 book ai didi

python - 替换 Numpy 图像中的像素值

转载 作者:行者123 更新时间:2023-12-01 09:07:37 25 4
gpt4 key购买 nike

我有一个尺寸为 720*1280 的零图像,并且有一个要更改的像素坐标列表:

x = [623, 623, 583, 526, 571, 669, 686, 697, 600, 594, 606, 657, 657, 657, 617, 646, 611, 657, 674, 571, 693, 688, 698, 700, 686, 687, 687, 693, 690, 686, 694]

y = [231, 281, 270, 270, 202, 287, 366, 428, 422, 517, 608, 422, 518, 608, 208, 214, 208, 231, 653, 652, 436, 441, 457, 457, 453, 461, 467, 469, 475, 477, 467]

这是散点图:

yy= [720 -x for x in y]
plt.scatter(x, yy, s = 25, c = "r")
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(0, 1280)
plt.ylim(0, 720)
plt.show()

enter image description here

这里是通过将像素值设置为255来生成二值图像的代码

image_zeros = np.zeros((720, 1280), dtype=np.uint8)
for i ,j in zip (x, y):
image_zeros[i, j] = 255

plt.imshow(image_zeros, cmap='gray')
plt.show()

这是结果:问题是什么!!

enter image description here

最佳答案

Goyo pointed out ,图像的分辨率是问题。默认图形尺寸为 6.4 英寸 x 4.8 英寸,默认分辨率为 100 dpi(至少对于当前版本的 matplotlib 而言)。因此,默认图像大小为 640 x 480。该图不仅包括 imshow 图像,还包括刻度线、刻度标签以及 x 和 y 轴以及白色边框。因此默认情况下可用于 imshow 图像的像素甚至少于 640 x 480。

您的 image_zeros 的形状为 (720, 1280)。该数组太大,无法在 640 x 480 像素的图像中完全渲染。

因此,要使用imshow生成白点,请设置figsize和dpi,使imshow图像可用的像素数大于(1280, 720):

import numpy as np
import matplotlib.pyplot as plt

x = np.array([623, 623, 583, 526, 571, 669, 686, 697, 600, 594, 606, 657, 657, 657, 617, 646, 611, 657, 674, 571, 693, 688, 698, 700, 686, 687, 687, 693, 690, 686, 694])
y = np.array([231, 281, 270, 270, 202, 287, 366, 428, 422, 517, 608, 422, 518, 608, 208, 214, 208, 231, 653, 652, 436, 441, 457, 457, 453, 461, 467, 469, 475, 477, 467])

image_zeros = np.zeros((720, 1280), dtype=np.uint8)
image_zeros[y, x] = 255

fig, ax = plt.subplots(figsize=(26, 16), dpi=100)
ax.imshow(image_zeros, cmap='gray', origin='lower')
fig.savefig('/tmp/out.png')

这是显示一些白点的特写:

enter image description here

为了使白点更容易看到,您可能希望使用 scatter 而不是 imshow:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([623, 623, 583, 526, 571, 669, 686, 697, 600, 594, 606, 657, 657, 657, 617, 646, 611, 657, 674, 571, 693, 688, 698, 700, 686, 687, 687, 693, 690, 686, 694])
y = np.array([231, 281, 270, 270, 202, 287, 366, 428, 422, 517, 608, 422, 518, 608, 208, 214, 208, 231, 653, 652, 436, 441, 457, 457, 453, 461, 467, 469, 475, 477, 467])
yy = 720 - y

fig, ax = plt.subplots()

ax.patch.set_facecolor('black')
ax.scatter(x, yy, s=25, c='white')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_xlim(0, 1280)
ax.set_ylim(0, 720)
fig.savefig('/tmp/out-scatter.png')

enter image description here

关于python - 替换 Numpy 图像中的像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51919953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com