我正在尝试使用一些矩形和圆形的随机图像生成 CLEVR 数据集。当我调试每个 plt.imshow()
语句的代码时,我可以看到一个新图像,其中生成了形状以及在上次执行的循环中生成的形状。虽然,令我惊讶的是,每次生成的第 5 张图像在 Debug模式下都不会显示。
此外,当我在本地保存图像时,我只看到两个对象。请找到图片以供引用。
import matplotlib.pyplot as plt
import cv2
import numpy as np
colors = [
(0, 0, 255), # r
(0, 255, 0), # g
(255, 0, 0), # b
(0, 156, 255), # o
(128, 128, 128), # k
(0, 255, 255) # y
]
img_size = 75
size = 5
def center_generate(objects):
while True:
pas = True
center = np.random.randint(0+size, img_size - size, 2)
if len(objects) > 0:
for name, c, shape in objects:
"""this condition checks if the new object generated is not completely covered by the already
generated objects"""
if ((center - c) ** 2).sum() < ((size * 2) ** 2):
pas = False
if pas:
return center
def build_dataset(dataset_type, loopnumber):
objects = []
img = np.ones((img_size, img_size, 3)) * 255
for color_id, color in enumerate(colors):
center = center_generate(objects)
if random.random() < 0.5:
start = (center[0]-size, center[1]-size)
end = (center[0]+size, center[1]+size)
img = cv2.rectangle(img, start, end, color, -1)
plt.imshow(img)
objects.append((color_id, center, 'r'))
else:
center_ = (center[0], center[1])
img = cv2.circle(img, center_, size, color, -1)
plt.imshow(img)
objects.append((color_id, center, 'c'))
if dataset_type == 'test':
plt.imsave('..\\img\\test\\img_' + str(loop) + '.jpeg', img)
else:
plt.imsave('..\\img\\train\\img_' + str(loop) + '.jpeg', img)
图像存储在本地。
谁能解释一下这里的问题? 谢谢
最佳答案
要保存图像,请使用 cv2.imwrite()
:
cv2.imwrite('..\\img\\train\\img_' + str(loop) + '.jpeg', img)
同样要使用 plt.imsave
正确保存它,您需要除以 255
:
plt.imsave('..\\img\\train\\img_' + str(loop) + '.jpeg', img/255.0)
或将它们转换为'uint8'
:
img = img.astype('uint8')
plt.imsave('..\\img\\train\\img_' + str(loop) + '.jpeg', img)
关于python - plt.imsave 保存图像不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56664231/