# Python-OpenCV(7)

ps: 有兴趣的可以看看`数字图像处理的MATLAB实现`这本书，讲的还是很不错的，代码使用`MATLAB`编写，推荐阅读

# 基础知识

g(x,y)= a if f(x,y) > T g(x,y)= b if f(x,y) <= T

# 简单阈值

cv2.threshhold(src, thresh, maxval, type[, dst])

cv2.THRESH_BINARY：img(x,y)>threshold ,dst(x,y) = max_value; 否则,dst(x,y)=0

cv2.THRESH_BINARY_INV：img(x,y)>threshold ,dst(x,y) = 0; 否则,dst(x,y)= max_value

cv2.THRESH_TRUNC：img(x,y)>threshold，dst(x,y) = max_value; 否则dst(x,y) = src(x,y)

cv2.THRESH_TOZERO：img(x,y)>threshold，dst(x,y) = src(x,y) ; 否则 dst(x,y) = 0

cv2.THRESH_TOZERO_INV：img(x,y)>threshold，dst(x,y) = 0 ; 否则 dst(x,y) = src(x,y)

```__author__ = 'gavinzhou'
# -*- coding: utf-8 -*-

import cv2
import numpy as np
from matplotlib import pyplot as plt

# convert to gray image
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# convert to binary image
ret, binary_img = cv2.threshold(gray_img, 100, 255, cv2.THRESH_BINARY)

cv2.imshow("ori", img)
cv2.imshow("binary1", binary_img)
cv2.waitKey(10000)
cv2.destroyAllWindows()```

# 自适应阈值

1. 采用自适应阈值
2. 阈值是根据图像上的每一个小区域计算与其对应的阈值得到的

Block Size：邻域大小(用来计算阈值的区域大小)

C：阈值等于的平均值或者加权平均值减去这个常数

block_size参数决定局部阈值的block的大小，block很小时，如block_size=3 or 5 or 7时，表现为边缘提取函数。当把block_size设为比较大的值时，如block_size=21、51等，便是二值化 代码:

```__author__ = 'gavinzhou'
# -*- coding: utf-8 -*-

import cv2
from matplotlib import pyplot as plt

# convert to gray image
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# convert to binary image

cv2.imshow("binary1", binary_img1)
cv2.imshow("binary2", binary_img2)
cv2.imshow("binary3", binary_img3)
cv2.imshow("binary4", binary_img4)
cv2.waitKey(10000)
cv2.destroyAllWindows()```

# Otsu’s Method

cv2.threshold(src, 0, maxval, cv2.THRESH_OTSU+type[, dst])

```__author__ = 'gavinzhou'
# -*- coding: utf-8 -*-

import cv2
from matplotlib import pyplot as plt

# convert to gray image
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# convert to binary image
ret2, binary_img = cv2.threshold(gray_img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

cv2.imshow("ori", img)
cv2.imshow("binary", binary_img)
print "Otsu's value is:", ret2

cv2.waitKey(10000)
cv2.destroyAllWindows()```

Otsu’s value is: 88.0

`otsu`方法寻找到的阈值是88，自动寻找，省时省力，效果好

114 篇文章54 人订阅

0 条评论

## 相关文章

### 【论文推荐】最新6篇主题模型相关论文—正则化变分推断主题模型、非参数先验、在线聊天、词义消歧、神经语言模型

【导读】专知内容组整理了最近六篇主题模型（Topic Modeling）相关文章，为大家进行介绍，欢迎查看! 1. Topic Modeling on Heal...

32350

### 二值图像中封闭孔洞的高效填充算法（附源码）。

鉴于心情不好，这篇文章只是简单的说说这个算法的过程。      在对图像二值化后，不管用的是什么二值算法，总会存在一些瑕疵，这个时候我们就需要进行一些...

41270

40460

13120

47380

51830

63160

33840

### 【重磅】深度学习顶会ICLR2018评审结果出炉,一文快速了解评审分析简报和评分最高的十篇论文

【导读】ICLR，全称为「International Conference on Learning Representations」（国际学习表征会议），201...

35550

### 使用infogan学习可解释的隐变量特征学习-及代码示例（代码和官方有差异）

In this week’s post I want to explore a simple addition to Generative Adversaria...

23530