一、函数简介

1、threshold—图像简单阈值化处理

函数原型:threshold(src, thresh, maxval, type, dst=None)

src:图像矩阵

thresh:阈值

maxVal:像素最大值

type:阈值化类型

2、adaptiveThreshold—图像自适应阈值化处理

函数原型:adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)

src:图像矩阵

maxValue:像素最大值

adaptiveMethod:自适应方法

thresholdType:阈值化类型

blockSize:窗口尺寸

C:为一整数,减去该整数来对阈值进行微调

3、thresholding.otsu—图像最大类间方差阈值化处理

函数原型:thresholding.otsu(src)

src:图像矩阵

4、thresholding.rc—图像Riddler-Calvard阈值化处理

函数原型:thresholding.rc(src)

src:图像矩阵

二、实例演练

1、图像二值化及反转

代码如下:

#encoding:utf-8

#
#图像二值化及反转
# import numpy as np
import cv2 image = cv2.imread("H:\\img\\coins.bmp")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#将图像转为灰色
blurred = cv2.GaussianBlur(image, (5, 5), 0)#高斯滤波
cv2.imshow("Image", image)#显示图像
(T, thresh) = cv2.threshold(blurred, 155, 255, cv2.THRESH_BINARY)#阈值化处理,阈值为:155
cv2.imshow("Threshold Binary", thresh) (T, threshInv) = cv2.threshold(blurred, 155, 255, cv2.THRESH_BINARY_INV)#反阈值化处理,阈值为:155
cv2.imshow("Threshold Binary Inverse", threshInv) #cv2.imshow("Coins", cv2.bitwise_and(image, image, mask =threshInv))
cv2.waitKey(0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

结果如下:

原图像:

二值化图像:

二值化反转图像:

2、图像自适应阈值化

代码如下:

#encoding:utf-8

#
#自适应阈值化处理
# import numpy as np
import cv2 image = cv2.imread("H:\\img\\lena.jpg")#读取图像
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#将图像转化为灰度
blurred = cv2.GaussianBlur(image, (5, 5), 0)#高斯滤波
cv2.imshow("Image", image) #自适应阈值化处理
#cv2.ADAPTIVE_THRESH_MEAN_C:计算邻域均值作为阈值
thresh = cv2.adaptiveThreshold(blurred, 255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 11, 4)
cv2.imshow("Mean Thresh", thresh)
#cv2.ADAPTIVE_THRESH_GAUSSIAN_C:计算邻域加权平均作为阈值
thresh = cv2.adaptiveThreshold(blurred, 255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 15, 3)
cv2.imshow("Gaussian Thresh", thresh)
cv2.waitKey(0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

结果如下:

原图像:

自适应阈值—邻域均值:

自适应阈值—邻域加权平均:

3、最大类间方差阈值化

代码如下:

#encoding:utf-8

#
#最大类间方差法
#
import numpy as np
import cv2
import mahotas
#载入图像
image = cv2.imread("H:\\img\\lena.jpg") #读入图像
cv2.imshow("Original",image)#显示原图像
cv2.waitKey()#程序暂停 #对图像进行高斯滤波
image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#将原图像转化为灰度图像
blurred = cv2.GaussianBlur(image,(5,5),0)#高斯滤波
cv2.imshow("Image",image)#显示图像
cv2.waitKey() #Otsu's threshold法
T = mahotas.thresholding.otsu(blurred)##最大类间方差法求阈值,T为阈值
print "Otsu's threshold:%d" %(T)#打印阈值
thresh = image.copy()#复制图像:image(矩阵)
thresh[thresh >T] = 255#矩阵thresh中>T的值赋值为255
thresh[thresh < 255] = 0#矩阵thresh中<255的值赋值为0
thresh = cv2.bitwise_not(thresh)#thresh取反
cv2.imshow("Otsu",thresh)#显示图像
cv2.waitKey()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

结果如下:

原图像:

最大类间方差阈值化:

4、Riddler-Calvard方法

代码如下:

#encoding:utf-8

#
#最大类间方差法
# import numpy as np
import cv2
import mahotas #载入图像
image = cv2.imread("H:\\img\\lena.jpg") #读入图像
cv2.imshow("Original",image)#显示原图像
cv2.waitKey()#程序暂停 #对图像进行高斯滤波
image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#将原图像转化为灰度图像
blurred = cv2.GaussianBlur(image,(5,5),0)#高斯滤波
cv2.imshow("Image",image)#显示图像
cv2.waitKey() #Riddler-Calvard方法
T = mahotas.thresholding.rc(blurred)#用Riddler-Calvard法求阈值
print "Riddler-Calvard:%d" %(T)#打印阈值
thresh = image.copy()#复制图像:image(矩阵)
thresh[thresh >T] = 255#矩阵thresh中>T的值赋值为255
thresh[thresh < 255] = 0#矩阵thresh中<255的值赋值为0
thresh = cv2.bitwise_not(thresh)#thresh取反
cv2.imshow("Riddler-Calvard",thresh)#显示图像
cv2.waitKey()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

结果如下:

原图像:

Riddler-Calvard方法:

转载自:http://blog.csdn.net/jnulzl/article/details/47753433

opencv之图像阈值化处理的更多相关文章

  1. opencv学习之路(13)、图像阈值化threshold

    一.图像阈值化简介 二.固定阈值 三.自适应阈值 #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat src ...

  2. 图像阈值化-threshold、adaptivethreshold

    在图像处理中阈值化操作,从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体).这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割.open ...

  3. 深入学习OpenCV中图像灰度化原理,图像相似度的算法

    最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...

  4. opencv2函数学习之threshold:实现图像阈值化

    在opencv2中,threshold函数可以进行阈值化操作. double threshold( const Mat& src, Mat& dst, double thresh,do ...

  5. java+opencv实现图像灰度化

    灰度图像上每个像素的颜色值又称为灰度,指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0.所谓灰度值是指色彩的浓淡程度,灰度直方图是指一幅数字图像中,对应每一个灰度值统计出具有该灰 ...

  6. 【学习opencv第七篇】图像的阈值化

    图像阈值化的基本思想是,给定一个数组和一个阈值,然后根据数组中每个元素是低于还是高于阈值而进行一些处理. cvThreshold()函数如下: double cvThreshold( CvArr* s ...

  7. OpenCV阈值化处理

    图像的阈值化就是利用图像像素点分布规律,设定阈值进行像素点分割,进而得到图像的二值图像.图像阈值化操作有多种方法,常用方法有经典的OTSU.固定阈值.自适应阈值.双阈值及半阈值化操作.这里对各种阈值化 ...

  8. 【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理具体解释

    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说.主要通过MFC单文档视图实现显示BMP图片点运算处理.包含图像灰度线性变换 ...

  9. Python图像处理丨基于OpenCV和像素处理的图像灰度化处理

    摘要:本篇文章讲解图像灰度化处理的知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,使用像素处理方法对图像进行灰度化处理. 本文分享自华为云社区<[Python图像处理 ...

随机推荐

  1. Linux 搭建 SVN

    一.yum 安装 subversion yum -y install subversion 二.创建svn版本库所在路径(建议放在opt.usr.home下) mkdir -p /usr/local/ ...

  2. [转]毕设- 深入HBase架构解析(二)

    深入HBase架构解析(二) 前言 这是<深入HBase架构解析(一)>的续,不多废话,继续.... HBase读的实现 通过前文的描述,我们知道在HBase写时,相同Cell(RowKe ...

  3. [转]浅谈Hive vs. HBase 区别在哪里

    浅谈Hive vs. HBase 区别在哪里 导读:Apache Hive是一个构建于Hadoop(分布式系统基础架构)顶层的数据仓库,Apache HBase是运行于HDFS顶层的NoSQL(=No ...

  4. Spark机器学习1·编程入门(scala/java/python)

    Spark安装目录 /Users/erichan/Garden/spark-1.4.0-bin-hadoop2.6 基本测试 ./bin/run-example org.apache.spark.ex ...

  5. usb gadget虚拟串口【转】

    本文转载自:https://blog.csdn.net/luckywang1103/article/details/61917916 配置 配置好之后编译重新烧写到开发板,发现出现了/dev/ttyG ...

  6. JavaEE之Junit单元测试

    1编写测试类,简单理解Junit可以部分用于取代java的main方法 2在测试类方法上添加注解 @Test 3 @Test修饰的方法要求:public void 方法名() {…} ,方法名自定义建 ...

  7. SDOI2019&十二省联考 游记

    差不多写完了,然鹅去长郡学习前忘在机房电脑里了 总之是咕了

  8. 电脑 HOST 文件

    路径: C:\Windows\System32\drivers\etc\HOSTS

  9. java中set集合的常用方法

    因为Set集合也是继承Collection集合 所以这里就不讲继承Collection集合的方法 都是继承Collection集合的方法 https://www.cnblogs.com/xiaostu ...

  10. hibernate-Table 'XXX.XXX' doesn't exist

    hibernate---Table 'XXX.XXX' doesn't exist 在设置自动生成数据表的策略中: <!-- 自动生成数据表的策略 --> <property nam ...