簡體   English   中英

將圖像從 CV_64F 轉換為 CV_8U

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM