Konvertieren Sie RGB-Bilder im Format Numpy Float64 verlustfrei in PIL-Bilder

Beim Konvertieren eines Arrays vom Gleitkommatyp in einen Ganzzahltyp kann es aufgrund der Typkonvertierung zu einer großen Lücke bei den Pixelwerten kommen. Dies liegt daran, dass beim Konvertieren von Pixelwerten vom Gleitkommatyp in den Ganzzahltyp eine Rundung auftritt. Wenn der ursprüngliche Pixelwert kleiner als 0 oder größer als 255 ist, kann es zu einer Kürzung oder einem Überlauf kommen, was zu einer großen Lücke in den Pixelwerten führt.

Um dieses Problem zu lösen, können Sie zunächst den Pixelwert des Gleitkommatyps auf den Bereich von 0 bis 255 normalisieren und dann eine Typkonvertierung durchführen. Dies erfolgt durch Multiplizieren des Pixelwerts mit 255, Runden und anschließendes Konvertieren des Ergebnisses in einen Ganzzahltyp.

Das Folgende ist ein Beispielcode, der ein Array vom Typ float64 in den Typ uint8 konvertiert und es auf den Bereich von 0 bis 255 normalisiert:

import cv2
import numpy as np

# 读取图像并转换为RGB格式的NumPy数组
img = cv2.imread("example.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 将像素值归一化到0到255的范围内
img_norm = np.round(img / np.max(img) * 255)

# 将float64类型的数组转换为uint8类型
img_uint8 = img_norm.astype(np.uint8)

# 打印数组的形状和数据类型
print("Shape:", img_uint8.shape)
print("Data type:", img_uint8.dtype)

Im obigen Code verwenden wir zunächst die Funktionen cv2.imread() und cv2.cvtColor(), um das Bild zu lesen und in ein NumPy-Array im RGB-Format zu konvertieren. Anschließend normalisieren wir die Pixelwerte auf den Bereich von 0 bis 255 und konvertieren dann mit der Methode astype() den Datentyp des Arrays in den Typ uint8. Schließlich verwenden wir die Eigenschaften „Shape“ und „DType“, um die Form bzw. den Datentyp des Arrays auszugeben.

Nach dieser Verarbeitung sollten Sie in der Lage sein, ein Bildarray mit einem kleinen Unterschied in den Pixelwerten zu erhalten.

Supongo que te gusta

Origin blog.csdn.net/qq_60943902/article/details/129349095
Recomendado
Clasificación