【问题标题】:plt.imsave saves image incorrectlyplt.imsave 错误地保存图像
【发布时间】:2019-06-19 09:21:02
【问题描述】:

我正在尝试使用一些矩形和圆形的随机图像生成 CLEVR 数据集。当我为每个plt.imshow() 语句调试代码时,我可以看到一个新图像,其中包含生成的形状以及在最后执行的循环中生成的形状。虽然,令我惊讶的是,每次生成的第 5 个图像在调试模式下都不会显示。

当我在本地保存图像时,我只看到两个对象。请查找图片以供参考。

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)

调试过程中生成的图像。

图像存储在本地。

谁能在这里解释这个问题? 谢谢

【问题讨论】:

  • 什么是img_size、center_generate?
  • @MohitMotwani 图像大小为 75,center_generate 只是生成对象中心的函数。我将更新问题中的 center_generate 代码。

标签: python opencv matplotlib


【解决方案1】:

要保存图像,请使用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)

【讨论】:

  • 非常感谢。你能告诉我为什么除以 255 会发生这种情况吗?
  • 其实我不确定。我用谷歌搜索了一下,一些试验和错误有所帮助。
  • 好的,没问题。我会试着找出来。还是谢谢你!
猜你喜欢
  • 2017-08-18
  • 2018-11-23
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多