2017-09-17 67 views
0

我想在Python中使用OpenCV將CV_64FC1類型的圖像轉換爲CV_8UC1將圖像從CV_64F轉換爲CV_8U

在C++中,使用convertTo功能,我們可以使用下面的代碼片段很容易地轉換圖像類型:

image.convertTo(image, CV_8UC1); 

我已經搜索在互聯網上,但無法找到沒有錯誤的任何解決方案。 Python OpenCV中的任何函數將其轉換?

+0

你看過[''cv2.cvtColor'](http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html)嗎? –

+0

我認爲cv2.cvtColor用於顏色空間轉換。我也可以使用它來轉換圖像類型嗎? – Jazz

+0

[numpy uint8像素包裝解決方案]的可能重複(https://stackoverflow.com/questions/7547557/numpy-uint8-pixel-wrapping-solution) – rayryeng

回答

2

您可以將其轉換爲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數組。我還沒有測試過它。請測試它並讓我知道結果。

+0

我正在使用Python 3.6.2的OpenCV 3.2,同時運行代碼,我得到這個錯誤:AttributeError:module'cv2'沒有屬性'fromarray'。 – Jazz

+0

@Jazz從OpenCV 3.2開始,似乎並不需要fromarray。 https://stackoverflow.com/questions/43923669/what-is-the-replacement-of-cv2-cv-fromarray-in-opencv-3-2 –

+1

在Python中,OpenCV Mat對象基本上是一個numpy數組。他們非常可以互換。 – zindarod

0

我面臨類似的問題,當我試圖將圖像64F轉換爲CV_U8時,我會以黑屏結束。

link將幫助您瞭解數據類型和轉換。以下是適合我的代碼。

from skimage import img_as_ubyte 
cv_image = img_as_ubyte(any_skimage_image)