OpenCV Python入门教程实际操作:图像阈值

系统 Linux
在本教程中,我们将介绍图像和视频分析的阈值。阈值的想法是进一步简化可视数据以进行分析。

在本教程中,我们将介绍图像和视频分析的阈值。阈值的想法是进一步简化可视数据以进行分析。首先,您可以转换为灰度,但随后必须考虑到灰度仍然至少具有255个值。最基本的阈值功能是根据阈值将所有内容转换为白色或黑色。假设我们希望阈值为125(总共255),然后将125以下的所有内容转换为0或黑色,将125以上的所有内容转换为255或白色。如果像平常一样转换为灰度,则将得到白色和黑色。如果不转换为灰度,则将获得带阈值的图片,但会有颜色。

尽管这听起来足够好,但事实并非如此。我们将在此处介绍多个示例和不同类型的阈值说明。我们将使用以下图像作为示例图像,但是可以使用自己的图像:

[[324209]]

本书中的简短内容是一个很好的例子,首先,背景实际上根本没有白色,一切都是暗淡的,但是一切都是变化的。有些部分很轻,很容易阅读,而另一些则很暗,需要聚焦很多。首先,让我们尝试一个简单的阈值:

retval, threshold = cv2.threshold(img, 10, 255, cv2.THRESH_BINARY)

二进制阈值是一个简单的“或”阈值,其中像素为255或0。在许多情况下,该阈值为白色或黑色,但是我们现在将图像保留为彩色,因此可能仍为彩色。这里的第一个参数是图像。下一个参数是阈值,我们选择10。下一个是最大值,我们将其选择为255。接下来,最后是阈值类型,我们将其选择为THRESH_BINARY。通常,选择阈值10会有些困难。我们选择10,因为这是低光图片,所以我们选择低数字。通常,大约125-150的效果最好。 

  1. import cv2  
  2. import numpy as np  
  3. img = cv2.imread('linuxidc.com.jpg')  
  4. retval, threshold =  cv2.threshold(img, 12, 255,  cv2.THRESH_BINARY)  
  5. cv2.imshow('original',img)  
  6. cv2.imshow('threshold',threshold)  
  7. cv2.waitKey(0)  
  8. cv2.destroyAllWindows() 

结果:

现在,图像的读取效果稍好一些,但仍然有些混乱。从视觉上看,它是更好的方法,但是使用程序来分析它仍然很困难。让我们看看是否可以进一步简化它。

首先,让我们对图像进行灰度处理,然后设置阈值: 

  1. import cv2  
  2. import numpy as np  
  3. grayscaled = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
  4. retval, threshold =  cv2.threshold(grayscaled, 10, 255,  cv2.THRESH_BINARY)  
  5. cv2.imshow('original',img)  
  6. cv2.imshow('threshold',threshold)  
  7. cv2.waitKey(0)  
  8. cv2.destroyAllWindows() 

结果如下:

是的,更简单,但是我们在这里仍然缺少很多上下文。接下来,我们可以尝试自适应阈值,它将尝试改变阈值,并希望解决弯曲的页面。 

  1. import cv2  
  2. import numpy as np  
  3. img = cv2.imread('www.linuxidc.com.jpg')  
  4. grayscaled = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
  5. th = cv2.adaptiveThreshold(grayscaled, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 115, 1)  
  6. cv2.imshow('original',img)  
  7. cv2.imshow('Adaptive threshold',th)  
  8. cv2.waitKey(0)  
  9. cv2.destroyAllWindows() 

结果如下:

还有一个可以执行的阈值版本,称为Otsu阈值(大津阈值)。它在这里不能很好地发挥左右,但是: 

  1. import cv2  
  2. import numpy as np  
  3. img = cv2.imread('1.jpg')  
  4. grayscaled = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
  5. retval2,threshold2 = cv2.threshold(grayscaled,125,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)  
  6. cv2.imshow('original',img)  
  7. cv2.imshow('Otsu threshold',threshold2)  
  8. cv2.waitKey(0)  
  9. cv2.destroyAllWindows() 

结果如下:

 

 

责任编辑:庞桂玉 来源: Linux公社
相关推荐

2010-03-10 19:00:20

Pythonnext函

2010-03-09 18:55:27

Python djan

2010-03-09 09:32:20

Python网页爬虫

2010-03-05 15:07:35

Python优化图片

2010-03-12 15:29:19

Pythonexe

2010-03-16 12:39:09

python for

2010-03-25 17:28:41

Python配置

2010-06-01 15:54:46

MySQL-pytho

2010-05-10 10:19:28

Oracle实战RMA

2010-04-01 14:06:13

Oracle Name

2010-05-19 10:37:06

MySQL expla

2010-04-20 11:06:33

Oracle索引

2010-03-31 16:11:00

Oracle启动

2010-05-18 17:39:13

MySQL alter

2010-04-14 17:06:41

Oracle安装路径

2010-04-16 13:59:40

Oracle数据

2010-04-01 13:39:43

Oracle Name

2010-03-17 13:14:00

Python Libr

2010-03-15 16:54:11

Python字典

2010-06-12 13:39:33

MySQL操作blob
点赞
收藏

51CTO技术栈公众号