[英]convert image from CV_64F to CV_8U
我想使用 OpenCV 在 Python CV_64FC1
CV_8UC1
類型的圖像轉換為CV_8UC1
。
在 C++ 中,使用convertTo
函數,我們可以使用以下代碼片段輕松轉換圖像類型:
image.convertTo(image, CV_8UC1);
我在互聯網上搜索過,但找不到任何沒有錯誤的解決方案。 Python OpenCV 中的任何函數來轉換它?
您可以將其轉換為 Numpy 數組。
import numpy as np
# Convert source image to unsigned 8 bit integer Numpy array
arr = np.uint8(image)
# Width and height
h, w = arr.shape
似乎 OpenCV Python API 也接受 Numpy 數組。 不過我還沒有測試過。 請測試一下,讓我知道結果。
我遇到了類似的問題,當我嘗試將圖像 64F 轉換為 CV_U8 時,最終會出現黑屏。
此鏈接將幫助您了解數據類型和轉換。 下面是對我有用的代碼。
from skimage import img_as_ubyte
cv_image = img_as_ubyte(any_skimage_image)
對於那些出現黑屏或大量噪點的人,您需要先對圖像進行標准化,然后再轉換為 8 位。 這是直接使用 numpy 完成的,因為 OpenCV 對其圖像使用 numpy 數組。
在標准化之前,圖像的范圍在我的情況下是從4267.0
到-4407.0
。 現在規范化:
# img is a numpy array/cv2 image
img = img - img.min() # Now between 0 and 8674
img = img / img.max() * 255
現在圖像在 0 到 255 之間,我們可以轉換為 8 位整數。
new_img = np.uint8(img)
這也可以通過img.astype(np.uint8)
來完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.