Mit dem Code unten lese ich das gleiche Bild mit OpenCV und mit Tensorflow.Visualisieren mit OpenCV Bild lesen von 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)
Wie Sie aus dem Bild sehen können, dass es ein Unterschied zwischen dem Bild von OpenCV (rechts Farben) und durch Tensorflow (falsche Farben) lesen.
Ich habe versucht, die Farben des Tensorflow Bild zu normalisieren mit cv2.normalize(image, image, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8UC3)
aber nichts geändert.
Ich habe auch versucht, das Bild als tf.uint8
zu lesen (Entfernen der Initial Cast zu tf.float32
), aber keine Änderungen.
Wie kann ich das mit Tensorflow gelesene Bild anzeigen, wenn OpenCV korrekt verwendet wird?
es sieht aus wie die roten und blauen Kanäle vertauscht, was die Reihenfolge Bilder in tensorflow zum Lesen von RGB Standard ist? ist es BGR oder RGB? – EdChum
Sie haben Recht! Das Tensorflow-Format ist RGB, während das OpenCV-Format BGR ist. Also, wie kann ich zwischen diesen 2 Farbräumen konvertieren? – nessuno
Ich sehe jetzt nur die Dokumente, Sie müssen möglicherweise die Kanäle selbst nach dem Laden tauschen, da ich keine Optionen sehe, um die Kanalreihenfolge zu spezifizieren – EdChum