簡體   English   中英

plt.imsave 錯誤地保存圖像

[英]plt.imsave saves image incorrectly

我正在嘗試使用矩形和圓形的一些隨機圖像生成 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)

調試期間生成的圖像。 調試期間生成的圖像

本地存儲的圖像。

圖片保存在本地

有人可以在這里解釋這個問題嗎? 謝謝

要保存圖像使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM