С приведенным ниже кодом я читаю одно и то же изображение с OpenCV и с Tensorflow.Визуализируйте изображение с OpenCV, прочитанное tensorflow
import tensorflow as tf
import cv2
def get_image(image_path):
"""Reads the jpg image from image_path.
Returns the image as a tf.float32 tensor
Args:
image_path: tf.string tensor
Reuturn:
the decoded jpeg image casted to float32
"""
return tf.image.convert_image_dtype(
tf.image.decode_jpeg(
tf.read_file(image_path), channels=3),
dtype=tf.uint8)
path = "./images/2010_006748.jpg"
original_image = cv2.imread(path)
image_tensor = get_image(tf.constant(path))
# convert to uint8
image_tensor = tf.image.convert_image_dtype(image_tensor, dtype=tf.uint8)
with tf.Session() as sess:
image = sess.run(image_tensor)
cv2.imshow("tf", image)
cv2.imshow("original", original_image)
cv2.waitKey(0)
Как вы можете видеть на картинке, Ther разница между изображением прочитан OpenCV (правый цвета) и Tensorflow (неправильные цвета).
Я пытался нормализовать цвета изображения Tensorflow используя cv2.normalize(image, image, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8UC3)
но ничего не изменилось.
Я также попытался прочитать изображение как tf.uint8
(удаление начального литья до tf.float32
), но никаких изменений.
Как я могу отобразить изображение, считываемое с помощью Tensorflow, используя OpenCV правильно?
это выглядит как красные и синие каналы поменялись местами, что порядок по умолчанию для чтения RGB изображения в tensorflow? это BGR или RGB? – EdChum
Вы правы! Формат Tensorflow - RGB, а формат OpenCV - BGR. Итак, как я могу преобразовать эти два цветовых пространства? – nessuno
Я просто смотрю на документы сейчас, вам, возможно, придется поменять местами сами после загрузки, так как я не вижу никаких параметров для указания порядка канала. – EdChum