簡體   English   中英

無法使用adaptiveThreshold:函數adaptiveThreshold 中的CV_8UC1

[英]Failure to use adaptiveThreshold: CV_8UC1 in function adaptiveThreshold

我使用過 openCV python 並遇到錯誤。

img_blur = cv2.medianBlur(self.cropped_img,5)
img_thresh_Gaussian = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

plt.subplot(1,1,1),plt.imshow(img_thresh_Gaussian, cmap = 'gray')
plt.title("Image"), plt.xticks([]), plt.yticks([])
plt.show()

但我收到了:

cv2.error: /home/phuong/opencv_src/opencv/modules/imgproc/src/thresh.cpp:1280: error: (-215) src.type() == CV_8UC1 in function adaptiveThreshold

我必須安裝其他東西嗎?

問題是您正在嘗試對非灰度圖像使用自適應閾值。 並且該功能僅適用於灰度圖像。

因此,您必須按照文檔中的說明將圖像轉換為灰度格式。

他們以灰度格式讀取圖像: img = cv2.imread('dave.jpg',0) 您還可以使用以下img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)將其轉換為灰度: img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

你應該像這樣加載你的文件

src.create(rows, cols, CV_8UC1);
src = imread(your-file, CV_8UC1);

在那之后

adaptiveThreshold(src, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 75, 10);

您可以將代碼更改為稍微像這樣:

img_blur = cv2.medianBlur(self.cropped_img,5).astype('uint8')
img_thresh_Gaussian = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

只需添加 ('uint8') 而模糊就解決了我的問題。

您必須以灰度圖像讀取圖像,因此請使用以下代碼:

image = imread('address', 0)

0 將圖像通道交換為灰度

嘗試在 imread 的第二個參數中添加 cv2.IMREAD_GRAYSCALE

img = cv2.imread(File_path, cv2.IMREAD_GRAYSCALE)

在閾值處理之前將圖像轉換為灰度:

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_blur = cv2.medianBlur(img_gray,5)
img_thresh_Gaussian = cv2.adaptiveThreshold(img_blur, 255,
        cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

要解決這個問題,您需要使用 0(零)作為另一個參數而不是圖像路徑來加載灰度圖像。
img = cv2.imread(imagepath, 0)
或者
img = cv2.imread(imagepath, cv2.IMREAD_GRAYSCALE)

暫無
暫無

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

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