OpenCV Python教程:图像阈值-演道网
尽管这听起来足够好,但事实并非如此。我们将在此处介绍多个示例和不同类型的阈值说明。我们将使用以下图像作为示例图像,但是可以使用自己的图像:
本书中的简短内容是一个很好的例子,说明了为什么有人会阈值。首先,背景实际上根本没有白色,一切都是暗淡的,但是一切都是变化的。有些部分很轻,很容易阅读,而另一些则很暗,需要聚焦很多。首先,让我们尝试一个简单的阈值:
retval, threshold = cv2.threshold(img, 10, 255, cv2.THRESH_BINARY)
二进制阈值是一个简单的“或”阈值,其中像素为255或0。在许多情况下,该阈值为白色或黑色,但是我们现在将图像保留为彩色,因此可能仍为彩色。这里的第一个参数是图像。下一个参数是阈值,我们选择10。下一个是最大值,我们将其选择为255。接下来,最后是阈值类型,我们将其选择为THRESH_BINARY。通常,选择阈值10会有些困难。我们选择10,因为这是低光图片,所以我们选择低数字。通常,大约125-150的效果最好。
import cv2
import numpy as np
img = cv2.imread('linuxidc.com.jpg')
retval, threshold = cv2.threshold(img, 12, 255, cv2.THRESH_BINARY)
cv2.imshow('original',img)
cv2.imshow('threshold',threshold)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:
现在,图像的读取效果稍好一些,但仍然有些混乱。 从视觉上看,它是更好的方法,但是使用程序来分析它仍然很困难。 让我们看看是否可以进一步简化它。
首先,让我们对图像进行灰度处理,然后设置阈值:
import cv2
import numpy as np
grayscaled = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
retval, threshold = cv2.threshold(grayscaled, 10, 255, cv2.THRESH_BINARY)
cv2.imshow('original',img)
cv2.imshow('threshold',threshold)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果如下:
是的,更简单,但是我们在这里仍然缺少很多上下文。 接下来,我们可以尝试自适应阈值,它将尝试改变阈值,并希望解决弯曲的页面。
import cv2
import numpy as np
img = cv2.imread('www.linuxidc.com.jpg')
grayscaled = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
th = cv2.adaptiveThreshold(grayscaled, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 115, 1)
cv2.imshow('original',img)
cv2.imshow('Adaptive threshold',th)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果如下:
还有一个可以执行的阈值版本,称为Otsu阈值(大津阈值)。 它在这里不能很好地发挥左右,但是:
import cv2
import numpy as np
img = cv2.imread('1.jpg')
grayscaled = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
retval2,threshold2 = cv2.threshold(grayscaled,125,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow('original',img)
cv2.imshow('Otsu threshold',threshold2)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果如下:
更多Python相关信息见Python 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx
本文永久更新链接地址:<a href="../../Linux
转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn