【发布时间】:2021-07-04 22:19:42
【问题描述】:
在opencv threshold page 有这样的代码:
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('noisy2.png',0)
# global thresholding
ret1,th1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
# Otsu's thresholding
ret2,th2 = cv.threshold(img,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
# Otsu's thresholding after Gaussian filtering
blur = cv.GaussianBlur(img,(5,5),0)
ret3,th3 = cv.threshold(blur,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
# plot all the images and their histograms
images = [img, 0, th1,
img, 0, th2,
blur, 0, th3]
titles = ['Original Noisy Image','Histogram','Global Thresholding (v=127)',
'Original Noisy Image','Histogram',"Otsu's Thresholding",
'Gaussian filtered Image','Histogram',"Otsu's Thresholding"]
for i in range(3):
plt.subplot(3,3,i*3+1),plt.imshow(images[i*3],'gray')
plt.title(titles[i*3]), plt.xticks([]), plt.yticks([])
plt.subplot(3,3,i*3+2),plt.hist(images[i*3].ravel(),256)
plt.title(titles[i*3+1]), plt.xticks([]), plt.yticks([])
plt.subplot(3,3,i*3+3),plt.imshow(images[i*3+2],'gray')
plt.title(titles[i*3+2]), plt.xticks([]), plt.yticks([])
plt.show()
我的问题是 cv.THRESH_BINARY 指的是 0 而 cv.THRESH_OTSU 指的是 8。如果我将它们加在一起 0+8 =8 那么为什么我使用 cv.THRESH_BINARY?我尝试不使用 thresh 二进制文件,但我的眼睛看不出有什么不同。还有其他我不知道的规则吗?
【问题讨论】:
-
您是否尝试过使用 THRESH_BINARY_INV、THRESH_TRUNC 等...?
-
我的意思是 + 号只是总结了 declerations 的值还是有其他含义?
-
在
cv.THRESH_BINARY+cv.THRESH_OTSU中,cv.THRESH_BINARY+毫无意义。它只是一个占位符,因为您可以将 OTSU 与cv.THRESH_BINARY_INV+cv.THRESH_OTSU等其他方法结合使用。只需将cv.THRESH_BINARY+视为默认行为即可。此外,您不应该关心枚举的实际值:它是一个实现细节,可能会在未来的版本中发生变化 -
@Miki 我想这就是我的答案。您可以将其添加为答案,以便我可以关闭线程
-
我现在不能,请随意发布您自己的答案。很高兴它有帮助
标签: python opencv image-processing image-thresholding