第十四节,OpenCV学习(三)图像的阈值分割
图像的阈值处理
图像的阈值分割:图像的二值化(Binarization)
阈值分割法的特点是:适用于目标与背景灰度有较强对比的情况,重要的是背景或物体的灰度比较单一,而且总可以得到封闭且连通区域的边界。
一、简单阈值
选取一个全局阈值,然后把图像分成非黑即白的二值图像。
cv2.threshold()【源图像矩阵,进行分类的阈值,高于(低于)阈值时赋予的新值,方法选择参数】
返回两个值:阈值,阈值处理后的图像矩阵。
- cv2.THRESH_BINARY(黑白二值)
- cv2.THRESH_BINARY_INV(黑白二值翻转)
- cv2.THRESH_TRUNC(得到图像为多像素值)
- cv2.THRESH_TOZERO(当像素高于阈值时像素设置为自己提供的像素值,低于阈值时不作处理)
- cv2.THRESH_TOZERO_INV(当像素低于阈值时设置为自己提供的像素值,高于阈值时不作处理)
- import cv2
- import numpy as np
- img = cv2.imread('dog.jpg', 0)# 灰度图
- # 黑白二值
- res, thresh1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
- # 黑白二值翻转
- res, thresh2 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
- # 得到图像为多像素值
- res, thresh3 = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)
- # 当像素高于阈值时像素设置为255,低于阈值时不作处理
- res, thresh4 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)
- # 当像素低于阈值时设置为255,高于阈值时不作处理
- res, thresh5 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)
- print(res)
- cv2.imshow('thresh1', thresh1)
- cv2.imshow('thresh2', thresh2)
- cv2.imshow('thresh3', thresh3)
- cv2.imshow('thresh4', thresh4)
- cv2.imshow('thresh5', thresh5)
- cv2.imshow('gray-img', img)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
二、自适应阈值
简单阈值是一种全局性的阈值,只需要设定一个阈值,整个图像都和这个阈值比较,而自适应阈值可以看成一种局部性的阈值,通过设定一个区域大小,比较这个点与区域大小里面像素点的平均值的大小关系确定这个像素点的情况。
这种方法理论上得到的效果更好,相当于在动态自适应调整属于自己像素点的阈值,而不是整幅图像都用一个阈值。
- import cv2
- import numpy as np
- img = cv2.imread('dog.jpg',0)
- res, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
- # 第一个参数为原始图像矩阵
- # 第二个参数为像素值上限
- # 第三个是自适应方法:
- # cv2.ADAPTIVE_THRESH_MEAN_C:领域内均值
- # -----cv2.ADAPTIVE_THRESH_GAUSSIAN_C:领域内像素点加权和,权重为一个高斯窗口
- # 第四个值得赋值方法:只有cv2.THRESH_BINARY和cv2.THRESH_BINARY_INV
- # 第五个Block size:设定领域大小(一个正方形的领域)
- # 第六个参数C,阈值等于均值或者加权值减去这个常数(为0相当于阈值,就是求得领域内均值或者加权值)
- th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 2)
- th3 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
- th4 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
- cv2.imshow('img', img)
- cv2.imshow('th1', th1)
- cv2.imshow('th2', th2)
- cv2.imshow('th3', th3)
- cv2.imshow('th4', th4)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
三、Otsu's二值化
cv2.threshold( )函数有两个返回值,一个是阈值,第二个是处理后的图像矩阵。
前面对于阈值的设定上,我们选择的阈值都是127,在实际情况中,有的图像阈值不是127得到的图像效果更好。那么这里就需要算法自己去寻找一个阈值,而Otsu's就可以自己找到一个认为最好的阈值。并且Otsu's非常适合于图像灰度直方图(只有灰度图像才有)具有双峰的情况。
- import cv2
- import numpy as np
- import matplotlib.pyplot as plt
- img = cv2.imread('dog.jpg', 0)
- ret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) # 简单滤波
- ret2, th2 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU) # Otsu滤波
- print(ret2)
- cv2.imshow('img', img)
- cv2.imshow('th1', th1)
- cv2.imshow('th2', th2)
- # 解决matplotlib中显示图像的中文乱码问题
- plt.rcParams['font.sans-serif'] = ['SimHei']
- plt.rcParams['axes.unicode_minus'] = False
- plt.hist(img.ravel(), 256)
- plt.title('灰度直方图')
- plt.show()
- cv2.waitKey(0)
- cv2.destroyAllWindows()
第十四节,OpenCV学习(三)图像的阈值分割的更多相关文章
- 第十四节: EF的三种模式(四) 之 原生正宗的 CodeFirst模式的默认约定
一. 简介 1. 正宗的CodeFirst模式是不含有edmx模型,需要手动创建实体.创建EF上下文,然后生成通过代码来自动映射生成数据库. 2. 旨在:忘记SQL.忘记数据库. 3. 三类配置:On ...
- 风炫安全web安全学习第三十四节课 文件包含漏洞防御
风炫安全web安全学习第三十四节课 文件包含漏洞防御 文件包含防御 在功能设计上不要把文件包含的对应文件放到前台去操作 过滤各种../,https://, http:// 配置php.ini文件 al ...
- 第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表、课程章节表、课程视频表、课程资源表
第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表.课程章节表.课程视频表.课程资源表 创建名称为app_courses的 ...
- 第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册
第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册 基于类的路由映射 from django.conf.urls import url, incl ...
- 第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理
第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字 ...
- 第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection)
第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection) Scrapy提供了方便的收集数据的机制.数据以key/value方式存储,值大多是计数 ...
- 第三百四十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制
第三百四十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制 用命令创建自动爬虫文件 创建爬虫文件是根据scrap ...
- 第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息
第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多 ...
- 第三百二十四节,web爬虫,scrapy模块介绍与使用
第三百二十四节,web爬虫,scrapy模块介绍与使用 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了 ...
随机推荐
- mange
from flask import Flask app = Flask(__name__) manager = Manager(app) 1. 重写Command class ShellCommand ...
- mysql查询order by 指定字段排序
当MySQL查询时排序的字段不是数字时而是汉字的时候也可以用when then 来指定排序. 列如yewu_check表的status 字段不是0,1,2而是汉字待办,已办,退回.可以如下写法: S ...
- IP包头结构详解
版本号(Version):长度4比特.标识目前采用的IP协议的版本号.一般的值为0100(IPv4),0110(IPv6) IP包头长度(Header Length):长度4比特.这个字段的作用是为了 ...
- 使用VScode配合chrome实现网页自动刷新
1.使用插件:livereload 2.VScode商店中搜索上述插件安装 3.Chrome商店中搜素上述插件安装 并设置允许访问文件网址: 4.在两方插件都打开的情况下,VScode中按下ctrl+ ...
- Net包管理NuGet(2)nuget包的生成方法
1,下载NuGetPackageExplorer,可以下载运行源码,也可以直接下载安装包安装安装之后打开 设置好内容之后点击绿色的打钩保存然后操作右边空白处 然后点击File>Save;保存之后 ...
- [C++项目]2048控制台游戏
#include <iostream> #include <windows.h> #include <ctime> using namespace std; ; ; ...
- DAY18、常用模块
一.random:随机数1.(0,1) 小数:random.random()2.[1,10] 整数:random.randint(1,10)3.[1,10) 整数:random.randrange(1 ...
- [ffmpeg] 定制滤波器
如果有定制ffmpeg滤波器的需求,有两个结构体是必须要了解的:AVFilter.AVFilterPad,所定制的滤波器主要就是通过填充这两个结构体来实现的.我们下面将详细解析这两个结构体,并通过对滤 ...
- Apache Flink教程----安装初体验
1.window 版本安装 https://flink.apache.org/downloads.html#apache-flink-164 D:\flink-1.6.2-bin-scala_2\fl ...
- SQL server 行转列 列转行
1.简单案例 create database Hang go use Hang create table Students ( Name varchar(50), Kemu varchar(50), ...