簡體   English   中英

在python中使用opencv庫對圖像進行閾值處理,並使用for循環使用不同的標志

[英]Thresholding image using opencv library in python with different flags using for loop

我將 cv2 作為 cv 導入,創建了一個閾值標志列表,並連接了“cv”。 使用標志,然后創建一個 for 循環來將標志作為參數傳遞。 但是python顯示TypeError。 我附上了輸出的圖像。 請幫助我使用循環或其他方式創建所有可能的閾值,除了每次明確提及標志。

[代碼的輸出 - Jupyter ]

在 OpenCV 中,給定的閾值選項(例如 cv.THRESH_BINARY 或 cv.THRESH_BINARY_INV)實際上是常量整數值。 您正在嘗試使用字符串而不是這些整數值。 這就是您收到類型錯誤的原因。 如果您想在循環中應用所有這些不同的閾值,一種選擇是為這些選項創建不同的列表,如下所示:

threshold_options = [cv.THRESH_BINARY, cv.THRESH_BINARY_INV, ...]

這樣,您就可以在循環中使用此列表的值,如下所示:

retval, thresh = cv.threshold(img, 127, 255, threshold_options[i])

整個代碼如下:

titles = [ 'THRESH_BINARY',
'THRESH_BINARY_INV',
'THRESH_MASK',
'THRESH_OTSU',
'THRESH_TOZERO',
'THRESH_TOZERO_INV',
'THRESH_TRIANGLE',
'THRESH_TRUNC']

threshold_options = [ cv.THRESH_BINARY,
cv.THRESH_BINARY_INV,
cv.THRESH_MASK,
cv.THRESH_OTSU,
cv.THRESH_TOZERO,
cv.THRESH_TOZERO_INV,
cv.THRESH_TRIANGLE,
cv.THRESH_TRUNC]


for i in range(len(titles)):
    retval, thresh = cv.threshold(img, 127, 255, threshold_options[i])
    plt.subplot(2,3,i+1), plt.title(titles[i]), plt.imshow(thresh, 'gray')
plt.show()

這可能是相關的: OpenCV 閾值示例

首先,不需要使用range ,您可以簡單地for flag in titles:執行for flag in titles:並傳遞flag 您是否檢查過您的圖像是否正確加載? 您確定您的標志對您的錯誤負責嗎?

對於以后的帖子,請包含一個最小的可重復示例。

您的代碼不起作用,因為標志的類型是int而不是string

您可以打印類型: print(type(cv.THRESH_BINARY))
結果是<class 'int'>

您可以創建一個int列表:

th_flags = [cv.THRESH_BINARY, cv.THRESH_BINARY_INV, cv.THRESH_TRUNC, cv.THRESH_TOZERO, cv.THRESH_TOZERO_INV]

for th in th_flags:
    retval, thresh = cv.threshold(img, 127, 255, th)
    cv.imshow('thresh', thresh)
    cv.waitKey(1000)

cv.destroyAllWindows()

該代碼並未涵蓋所有可能的選項
很少有標志可以使用求和來組合。

例子:

_, thresh = cv.threshold(img, 127, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)

暫無
暫無

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

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