OpenCV二值化--cv2.threshold()函数、cv2.adaptiveThreshold()函数
@[toc]
目录
1、cv2.threshold()函数
2、cv2.adaptiveThreshold()函数
3、3、什么时候用cv2.adaptiveThreshold()函数
一、cv2.threshold()函数
ret, th = cv2.threshold(src, thresh, maxval, type)
#src表示输入的图片, thresh表示阈值, maxval表示最大值, type表示阈值的类型
type的类型
1.cv2.THRESH_BINARY 表示阈值的二值化操作,大于阈值使用maxval表示,小于阈值使用0表示 |
2. cv2.THRESH_BINARY_INV 表示阈值的二值化翻转操作,大于阈值的使用0表示,小于阈值的使用最大值表示 |
3. cv2.THRESH_TRUNC 表示进行截断操作,大于阈值的使用阈值表示,小于阈值的不变 |
4. cv2.THRESH_TOZERO 表示进行化零操作,大于阈值的不变,小于阈值的使用0表示 |
5. cv2.THRESH_TOZERO_INV 表示进行化零操作的翻转,大于阈值的使用0表示,小于阈值的不变 |
二、cv2.adaptiveThreshold()函数
cv2.adaptiveThreshold()来实现自适应阈值
dst=cv.adaptiveThreshold(src,maxValue,adaptiveMethod,thresholdType,blockSize,C)
#dst代表自适应阈值处理结果。
#src代表要进行处理的原始图像。需要注意的是,该图像必须是8位单通道的图像。
#maxValue代表最大值。
#adaptiveMethod代表自适应方法。
#thresholdType 代表阈值处理方式,该值必须是 cv2.THRESH_BINARY 或者cv2.THRESH_BINARY_INV中的一个。
#blockSize代表块大小。表示一个像素在计算其阈值时所使用的邻域尺寸,通常为3、5、7等。
#C是常量。
adaptiveMethod代表自适应方法
函数包含cv2.ADAPTIVE_THRESH_MEAN_C和cv2.ADAPTIVE_THRESH_GAUSSIAN_C两种不同的方法。
这两种方法都是逐个像素地计算自适应阈值,自适应阈值等于每个像素由参数blockSize所指定邻域的加权平均值减去常量C。两种不同的方法在计算邻域的加权平均值时所采用的方式不同:
cv2.ADAPTIVE_THRESH_MEAN_C:邻域所有像素点的权重值是一致的。 |
cv2.ADAPTIVE_THRESH_GAUSSIAN_C:与邻域各个像素点到中心点的距离有关,通过高斯方程得到各个点的权重值。 |
代码实例:
import numpy as np
import cv2
img = cv2.imread("./12.jpg")
dst = cv2.resize(img, None, fx=0.5, fy=0.5,interpolation=cv2.INTER_CUBIC)#调整图片大小dst = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)
rett,th1 = cv2.threshold(dst,127,255,cv2.THRESH_BINARY)
th2 = cv2.adaptiveThreshold(dst,255,cv2.ADAPTIVE_THRESH_MEAN_C,\cv2.THRESH_BINARY,11,2)
#print(th2)
th3 = cv2.adaptiveThreshold(dst,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\cv2.THRESH_BINARY,11,2)
#print(th3)
cv2.imshow("orignal.jpg",dst)
cv2.imshow("threshold.jpg",th1)
cv2.imshow("adaptiveThreshold-MEAN.jpg",th2)
cv2.imshow("adaptiveThreshold-GAUSSIAN.jpg",th3)
cv2.imwrite("orignal.jpg",dst)
cv2.imwrite("threshold.jpg",th1)
cv2.imwrite("adaptiveThreshold-MEAN.jpg",th2)
cv2.imwrite("adaptiveThreshold-GAUSSIAN.jpg",th3)
print(dst)
print(th1)
print(th2)
print(th3)
cv2.waitKey(0)
输出结果对比:
#print(dst):
[[123 123 123 ... 143 143 142][123 123 123 ... 143 142 141][123 123 123 ... 142 141 140]...[ 61 57 55 ... 132 132 135][ 66 68 73 ... 132 132 135][ 77 76 76 ... 132 134 136]]# print(th1):
[[ 0 0 0 ... 255 255 255][ 0 0 0 ... 255 255 255][ 0 0 0 ... 255 255 255]...[ 0 0 0 ... 255 255 255][ 0 0 0 ... 255 255 255][ 0 0 0 ... 255 255 255]]# print(th2):
[[255 255 255 ... 255 255 255][255 255 255 ... 255 255 255][255 255 255 ... 255 255 0]...[255 255 255 ... 0 0 255][255 255 255 ... 0 0 255][255 255 255 ... 0 255 255]]# print(th3):
[[255 255 255 ... 255 255 255][255 255 255 ... 255 255 255][255 255 255 ... 255 255 255]...[255 255 255 ... 0 0 255][255 255 255 ... 0 0 255][255 255 255 ... 0 255 255]]
输出图片对比:
左边是原图,右边是经过灰度处理的图像
左边是cv2.threshold的图
中间是cv2.adaptiveThreshold(dst,255,cv2.ADAPTIVE_THRESH_MEAN_C,\ cv2.THRESH_BINARY,11,2)的图
右边是cv2.adaptiveThreshold(dst,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\ cv2.THRESH_BINARY,11,2)的图
三、什么时候用cv2.adaptiveThreshold()函数
可以看到经过二值化后的图有的部分偏暗,导致二值化后变成全黑,丢失了所有细节,原因threshold函数使用一个阈值对图像进行二值化,导致小于这个阈值的像素点全都变成0。因此使用一个阈值的二值化方法并不适用于上面的这张图。
如何解决这个问题?最简单的方法就是把图分成几个区域,每个区域分别进行二值化,也就是说二值化上面这张图需要不同的阈值按照这个思想,因此有了cv2.adaptiveThreshold函数,也因此在这个情况下需要用cv2.adaptiveThreshold()函数。
OpenCV二值化--cv2.threshold()函数、cv2.adaptiveThreshold()函数相关推荐
- python opencv图像二值化函数_python opencv 二值化 计算白色像素点的实例
python opencv 二值化 计算白色像素点的实例 贴部分代码 #! /usr/bin/env python # -*- coding: utf-8 -*- import cv2 import ...
- opencv二值化找轮廓检测背景简单小物体
一.前言 本篇主要是针对背景简单,且具有固定颜色的单类小物体,方法为在灰度化时选用图片的HSV中的S通道,再使用opencv 二值化找轮廓大法可将小物体框出. 原理很简单,图片->取S通道灰度化 ...
- opencv二值化的cv2.threshold函数
(一)简单阈值 简单阈值当然是最简单,选取一个全局阈值,然后就把整幅图像分成了非黑即白的二值图像了.函数为cv2.threshold() 这个函数有四个参数,第一个原图像,第二个进行分类的阈值,第三个 ...
- opencv 二值化 python_opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH_OTSU使用...
cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...
- opencv 二值化 matlab,opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH...
cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...
- opencv 二值化_Python-OpenCV获取图像轮廓的图像处理方法
一.引言 在<OpenCV阈值处理函数threshold处理32位彩色图像的案例>介绍了threshold 函数,但threshold 的图像阈值处理对于某些光照不均的图像,这种全局阈值分 ...
- python + opencv + 二值化处理图片数据集(三种方法)
二值化处理图片数据集 首先导入相应的包 cv2即opencv-python包 if __name__ == "__main__": 上面这一句话的含义: 自己的 .py 可以作为自 ...
- python:opencv 二值化处理
1:二值化处理 https://blog.csdn.net/zj360202/article/details/79165796 定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是 ...
- opencv 二值化 python_Python OpenCV 图像二值化-阈值分割
1.二值化处理 # 手动二值化处理 # 设置阈值大小 threshold thresh = 125 # 设置超过阈值像素值的最大值 maxval = 255 # THRESH_BINARY:超过阈值为 ...
最新文章
- 滴滴重磅发布:KDD2018大会187页人工智能+交通教程
- 大专计算机专业内容,大专计算机专业毕业论文参考范例
- 团队作业9--beta版本测试报告及发布说明
- 怎么用git将本地代码上传到远程服务器_git命令 将本地代码上传到远程服务器...
- 领域应用 | 常识性概念图谱建设以及在美团场景中的应用
- IT桔子分布式项目1
- es6 Node加载
- 为何python不好找工作-听说自学Python不好找工作,小白要如何学Python?
- flutter实现Icon可以用Image替换
- Linux系统知识汇总
- unity2020 for Mac 安装下载详解
- PRML 十大经典机器学习算法
- 国家测绘局制定的测绘与地理信息行业标准统计 (20110706)
- 分析微博游戏名人数据
- mysql .pem 文件_对于https ssl中的pem文件和key 文件的理解
- 网络复现笔记-AdaptSegNet
- python绘制菱形_用python画菱形
- mysql navicat视图_Navicat for MySQL视图功能介绍
- LED显示行业之闪烁现象
- 怎样在vs2010中添加图片资源呢?
热门文章
- 请求全国各地的geojson的数据
- 大数据在商业中的应用《智能时代--大数据和智能革命重新定义未来》
- Go语言中list的使用
- 将k1=v1k2=v2k3=v3k4=v4k5=v5k6={k7=v7k8=v8}k9=v9转为Map
- estimated parameters that ends with underscore in scikit
- MODIS产品MOD13Q1简介
- keil切换光标快捷键“_”“|”
- 评测Jetson AGX Xavier性能
- CF1770E Koxia and Tree
- 2017年计算机组装视频,2017年电脑CPU组装技巧