簡體   English   中英

從 BGR 到灰度的 OpenCV 顏色轉換錯誤

[英]Error in OpenCV color conversion from BGR to grayscale

我正在嘗試使用以下代碼將圖像從 BGR 轉換為灰度格式:

img = cv2.imread('path//to//image//file')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

這似乎工作正常:我檢查了img變量的數據類型,結果是 numpy ndarray 和形狀是(100,80,3) 但是,如果我給出與cvtColor函數輸入維度相同的本機 numpy ndarray 數據類型的圖像,則會出現以下錯誤:

Error: Assertion failed (depth == 0 || depth == 2 || depth == 5) in cv::cvtColor, file D:\Build\OpenCV\opencv-3.4.1\modules\imgproc\src\color.cpp, line 11109
cv2.error: OpenCV(3.4.1) D:\Build\OpenCV\opencv-3.4.1\modules\imgproc\src\color.cpp:11109: error: (-215) depth == 0 || depth == 2 || depth == 5 in function cv::cvtColor

第二種情況的代碼是(在此處制作自定義np.ndarray ):

img = np.full((100,80,3), 12)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 

誰能澄清這個錯誤的原因是什么以及如何糾正它?

這是因為您的 numpy 數組不是由正確的數據類型組成。 默認情況下np.int64 (64 位)類型的數組,但是, cv2.cvtColor()需要 8 位( np.uint8 )或 16 位( np.uint16 )。 要更正此更改np.full()函數以包含數據類型:

img = np.full((100,80,3), 12, np.uint8)

出現錯誤是因為cv2.imread返回的 numpy 數組的數據類型是uint8 ,與np.full()返回的 numpy 數組的數據類型不同。 要將數據類型設為 uint8,請添加dtype參數-

img = np.full((100,80,3), 12, dtype = np.uint8)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

使用初始圖像作為源和dtype=np.uint8初始化新的 numpy 數組可能更容易:

import numpy as np    
img = cv2.imread('path//to//image//file')    
img = np.array(img, dtype=np.uint8)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

想象一下,如果您嘗試將其應用為:

data = np.array(list(map(preprocessing,data)))

它不會工作,因為 np.array 創建 int64 並且您試圖將 np.uint8 分配給它,您應該做的是添加 dtype 參數如下:

data = np.array(list(map(preprocessing,data)), dtype = np.uint8)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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