为什么cv2.imwrite方法为mnist测试图像数据集写一个黑色正方形?

问题描述

我正在尝试使用openCV覆盖MNIST测试图像之一,但它仅显示一个黑色正方形。我不明白为什么!

import keras
import numpy as np
import mnist
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.utils import to_categorical
import cv2

train_images = mnist.train_images()
train_labels = mnist.train_labels()
test_images = mnist.test_images()
test_labels = mnist.test_labels()

# Normalize the images.
train_images = (train_images / 255) - 0.5
test_images = (test_images / 255) - 0.5
print(train_images.shape)
#print(test_images.shape)
img = cv2.imwrite( "img.jpg",test_images[0])

解决方法

正如其他人在评论中指出的那样,您试图将规范化的图像保存在域[-0.5,0.5]中,该域以前位于域[0,255]中。 cv2.imwrite不支持此功能。这是官方帮助:

函数imwrite将图像保存到指定的文件。图片 根据文件名扩展名选择格式(有关详细信息,请参见imread() 扩展列表)。只有8位(或16位无符号(CV_16U)) PNG,JPEG 2000和TIFF)单通道或3通道(带有“ BGR” 频道顺序)可以使用此功能保存图像

在归一化之前保存图像,或按以下方式撤消它:

img = cv2.imwrite( "img.jpg",(test_images[0] + 0.5) * 255)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...