opencv之图像阈值化处理
一、函数简介
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之图像阈值化处理的更多相关文章
- opencv学习之路(13)、图像阈值化threshold
一.图像阈值化简介 二.固定阈值 三.自适应阈值 #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat src ...
- 图像阈值化-threshold、adaptivethreshold
在图像处理中阈值化操作,从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体).这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割.open ...
- 深入学习OpenCV中图像灰度化原理,图像相似度的算法
最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...
- opencv2函数学习之threshold:实现图像阈值化
在opencv2中,threshold函数可以进行阈值化操作. double threshold( const Mat& src, Mat& dst, double thresh,do ...
- java+opencv实现图像灰度化
灰度图像上每个像素的颜色值又称为灰度,指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0.所谓灰度值是指色彩的浓淡程度,灰度直方图是指一幅数字图像中,对应每一个灰度值统计出具有该灰 ...
- 【学习opencv第七篇】图像的阈值化
图像阈值化的基本思想是,给定一个数组和一个阈值,然后根据数组中每个元素是低于还是高于阈值而进行一些处理. cvThreshold()函数如下: double cvThreshold( CvArr* s ...
- OpenCV阈值化处理
图像的阈值化就是利用图像像素点分布规律,设定阈值进行像素点分割,进而得到图像的二值图像.图像阈值化操作有多种方法,常用方法有经典的OTSU.固定阈值.自适应阈值.双阈值及半阈值化操作.这里对各种阈值化 ...
- 【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理具体解释
本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说.主要通过MFC单文档视图实现显示BMP图片点运算处理.包含图像灰度线性变换 ...
- Python图像处理丨基于OpenCV和像素处理的图像灰度化处理
摘要:本篇文章讲解图像灰度化处理的知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,使用像素处理方法对图像进行灰度化处理. 本文分享自华为云社区<[Python图像处理 ...
随机推荐
- 【Python】常用内建模块(卒)
内容来自廖雪峰的官方网站 笔记性质 1.datetime 2.collections 3.base64 4.struct 5.hashlib 6.itertools 7.contextlib 8.XM ...
- Java学习笔记之Java 继承中的构造方法
参考
- redis_入门网址
redis中文网: http://www.redis.cn/ 可以 试用 以及 下载 redis百度百科:http://baike.baidu.com/link?url=MEkE5MpGAOfJ7ci ...
- Linux之间配置免秘钥访问
环境说明 [root@localhost1 ~]# cat /etc/redhat-release CentOS release 6.5 (Final) [root@localhost1 ~]# un ...
- 在winform中,禁止combobox随着鼠标一起滑动!
在winform中,如果form上或者是控件上有一个combobox控件,当你选择这个控件,当你鼠标移动其他地方,滑动鼠标时,这时combobox的选择值就会随之鼠标一起变化,如果你不想让comboB ...
- 求逆元 HDU 2516
A/B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- AtCoder Regular Contest 095
AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...
- 基于XML配置的AOP实现日志打印
Spring中可以使用注解或XML文件配置的方式实现AOP.1.导入jar包 com.springsource.net.sf.cglib -2.2.0.jar com.springsource.org ...
- PlusOne
问题描述:一个数组每一位代表一个数字的每一位.数字高位在数组的低位.求数字加1后得到新数组. 算法分析:要从数组的高位到低位进行遍历. public class PlusOne { public in ...
- C++ 函数后面的const
一个函数 AcGePoint3dstartPoint() const; const放在后面跟前面有区别么 ==> 准确的说const是修饰this指向的对象的 譬如,我们定义了 classA{ ...