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