前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV中图像二值化函数调用几个关键点详解

OpenCV中图像二值化函数调用几个关键点详解

作者头像
OpenCV学堂
发布2019-12-24 15:08:40
1.5K0
发布2019-12-24 15:08:40
举报

微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识

threshold函数-参数说明

OpenCV在图像二值化的时候提供了一些很有用的API函数,其实基于指定阈值与全局阈值二值化的API函数为

代码语言:javascript
复制
double cv::threshold(    
InputArray      src,
OutputArray   dst,
double    thresh,
double    maxval,
int   type
)

其官方对各个参数的解释如下

src 输入图像,浮点数或者字节类型

dst 输出图像,跟输入图像类型一致

thresh, 阈值

maxval 最大值

type 二值化方式

当前支持五种二值化方式,分别为:

使用演示

输入原图为:

直接输入阈值二值化,很多人正常的操作是:

代码语言:javascript
复制
# 转为灰度之后
src = cv.imread("D:/images/test.png")
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY)
cv.imshow("manual-thresh-binary", binary)

显示如下:

实际上threshold在直接输入阈值的时候是支持三通道图像的,代码如下:

代码语言:javascript
复制
src = cv.imread("D:/images/test.png")
cv.imshow("input", src)
h, w, c = src.shape

# 手动阈值
ret, binary = cv.threshold(src, 127, 255, cv.THRESH_BINARY)
cv.imshow("manual-thresh-binary-RGB", binary)

显示如下:

但是当手动阈值输入,变成自动阈值计算的时候,threshold方法就只支持单通道的图像,换言之,对三通道的图像,threshold不支持自动阈值查找。如果输入图像是三通道的调用下面的代码

代码语言:javascript
复制
# 自动阈值
src = cv.imread("D:/images/test.png")
ret, binary = cv.threshold(src, 127, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
cv.imshow("auto-binary-gray", binary)

就会得到如下错误:

error: (-215:Assertion failed) src.type() == CV_8UC1 in function 'cv::threshold'

修改一下

代码语言:javascript
复制
src = cv.imread("D:/images/test.png")
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
cv.imshow("auto-binary-gray", binary)

显示结果如下:

另外一个问题,这个也是很多新手调用C++版本threshold的自动阈值计算问过我的问题,就是自动阈值计算出来的阈值是多少,其实就是调用函数的返回double值而已。可见有时候大家不怎么看官方文档。

以上就是threshold函数在调用时候值得注意两个关键点!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档