@[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_Ccv2.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()函数相关推荐

  1. python opencv图像二值化函数_python opencv 二值化 计算白色像素点的实例

    python opencv 二值化 计算白色像素点的实例 贴部分代码 #! /usr/bin/env python # -*- coding: utf-8 -*- import cv2 import ...

  2. opencv二值化找轮廓检测背景简单小物体

    一.前言 本篇主要是针对背景简单,且具有固定颜色的单类小物体,方法为在灰度化时选用图片的HSV中的S通道,再使用opencv 二值化找轮廓大法可将小物体框出. 原理很简单,图片->取S通道灰度化 ...

  3. opencv二值化的cv2.threshold函数

    (一)简单阈值 简单阈值当然是最简单,选取一个全局阈值,然后就把整幅图像分成了非黑即白的二值图像了.函数为cv2.threshold() 这个函数有四个参数,第一个原图像,第二个进行分类的阈值,第三个 ...

  4. opencv 二值化 python_opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH_OTSU使用...

    cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...

  5. opencv 二值化 matlab,opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH...

    cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...

  6. opencv 二值化_Python-OpenCV获取图像轮廓的图像处理方法

    一.引言 在<OpenCV阈值处理函数threshold处理32位彩色图像的案例>介绍了threshold 函数,但threshold 的图像阈值处理对于某些光照不均的图像,这种全局阈值分 ...

  7. python + opencv + 二值化处理图片数据集(三种方法)

    二值化处理图片数据集 首先导入相应的包 cv2即opencv-python包 if __name__ == "__main__": 上面这一句话的含义: 自己的 .py 可以作为自 ...

  8. python:opencv 二值化处理

    1:二值化处理 https://blog.csdn.net/zj360202/article/details/79165796 定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是 ...

  9. opencv 二值化 python_Python OpenCV 图像二值化-阈值分割

    1.二值化处理 # 手动二值化处理 # 设置阈值大小 threshold thresh = 125 # 设置超过阈值像素值的最大值 maxval = 255 # THRESH_BINARY:超过阈值为 ...

最新文章

  1. 滴滴重磅发布:KDD2018大会187页人工智能+交通教程
  2. 大专计算机专业内容,大专计算机专业毕业论文参考范例
  3. 团队作业9--beta版本测试报告及发布说明
  4. 怎么用git将本地代码上传到远程服务器_git命令 将本地代码上传到远程服务器...
  5. 领域应用 | 常识性概念图谱建设以及在美团场景中的应用
  6. IT桔子分布式项目1
  7. es6 Node加载
  8. 为何python不好找工作-听说自学Python不好找工作,小白要如何学Python?
  9. flutter实现Icon可以用Image替换
  10. Linux系统知识汇总
  11. unity2020 for Mac 安装下载详解
  12. PRML 十大经典机器学习算法
  13. 国家测绘局制定的测绘与地理信息行业标准统计 (20110706)
  14. 分析微博游戏名人数据
  15. mysql .pem 文件_对于https ssl中的pem文件和key 文件的理解
  16. 网络复现笔记-AdaptSegNet
  17. python绘制菱形_用python画菱形
  18. mysql navicat视图_Navicat for MySQL视图功能介绍
  19. LED显示行业之闪烁现象
  20. 怎样在vs2010中添加图片资源呢?

热门文章

  1. 请求全国各地的geojson的数据
  2. 大数据在商业中的应用《智能时代--大数据和智能革命重新定义未来》
  3. Go语言中list的使用
  4. 将k1=v1k2=v2k3=v3k4=v4k5=v5k6={k7=v7k8=v8}k9=v9转为Map
  5. estimated parameters that ends with underscore in scikit
  6. MODIS产品MOD13Q1简介
  7. keil切换光标快捷键“_”“|”
  8. 评测Jetson AGX Xavier性能
  9. CF1770E Koxia and Tree
  10. 2017年计算机组装视频,2017年电脑CPU组装技巧