OpenCV(基础补充)图像二值化

目录

一、基础理论

1、二值图像概念

2、API介绍

二、图像二值化(黑白化)步骤:

1、彩图化灰度图

2、灰度图化黑白图(二值化)

3、翻转黑白部分

总代码

参考资料


一、基础理论

1、二值图像概念

二值图像(Binary Image)是指将图像上的每一个像素只有两种可能的取值或灰度等级状态,人们经常用黑白、B&W、单色图像表示二值图像

2、API介绍

def threshold(src: Any,
              thresh: Any,
              maxval: Any,
              type: Any,
              dst: Any = None) -> None

src:源图像,可以为8位的灰度图,也可以为32位的彩色图像。(两者由区别)

dst:输出图像

thresh:阈值

maxval:dst图像中最大值

type:阈值类型,可以具体类型如下:

enum ThresholdTypes {
    THRESH_BINARY     = 0,        //黑白
    THRESH_BINARY_INV = 1,        //黑白反转
    THRESH_TRUNC      = 2,        //得到图像多像素值
    THRESH_TOZERO     = 3,        //当前点值大于阈值时,不改变,否则设置为0
    THRESH_TOZERO_INV = 4,        //当前点值大于阈值时,设置为0,否则不改变
    THRESH_MASK       = 7,
    THRESH_OTSU       = 8,        //自适应阈值
    THRESH_TRIANGLE   = 16
};

二、图像二值化(黑白化)步骤:

彩色图像——>灰度图像——>二值图像

1、彩图化灰度图

C++:

//灰度图
void ToGray()
{
	// 转为灰度图
	cvtColor(img, grayImage, COLOR_BGR2GRAY);
	imshow("灰度图像", grayImage);
}

python:

# 1、灰度图像
imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#                           类型
cv.imshow('imggray', imgray)

2、灰度图化黑白图(二值化)

C++: 

//黑白图(二值化)
void ToBin()
{
	// 将灰度图二值化
	threshold(grayImage, binImage, 0, 255, THRESH_OTSU);
	imshow("二值化图像", binImage);
}

python:

# 2、二进制图像
ret, binary = cv.threshold(imgray, 127, 255, 0)
#阈值 二值图像
cv.imshow('binary', binary)

3、翻转黑白部分

ret, binary = cv.threshold(imgray, 127, 255, cv.THRESH_OTSU|cv.THRESH_BINARY_INV)

 

总代码

C++: 

# 灰度图与二值图
# 注:二值图必须由灰度图转化
import cv2 as cv

img = cv.imread('Resource/test.jpg')
cv.imshow('img', img)

# 1、灰度图像
imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#                           类型
cv.imshow('imggray', imgray)

# 2、二进制图像
ret, binary = cv.threshold(imgray, 127, 255, cv.THRESH_OTSU)     #THRESH_OTSU:自适应阈值处理
# ret, binary = cv.threshold(imgray, 127, 255, cv.THRESH_OTSU|cv.THRESH_BINARY_INV)
#THRESH_OTSU:自适应阈值处理        cv.THRESH_TOZERO_INV:二值图反转(黑白反转)
#阈值 二值图像
cv.imshow('binary', binary)

cv.waitKey(0)

python:

# 灰度图与二值图
# 注:二值图必须由灰度图转化
import cv2 as cv

img = cv.imread('Resource/test.jpg')
cv.imshow('img', img)

# 1、灰度图像
imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#                           类型
cv.imshow('imggray', imgray)

# 2、二进制图像
ret, binary = cv.threshold(imgray, 127, 255, 0)
#阈值 二值图像
cv.imshow('binary', binary)

cv.waitKey(0)

参考资料

https://baike.baidu.com/item/%E4%BA%8C%E5%80%BC%E5%9B%BE%E5%83%8F/5166431?fr=aladdin

https://blog.csdn.net/weixin_42296411/article/details/80901080?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_v2~rank_aggregation-2-80901080.pc_agg_rank_aggregation&utm_term=threshold%E5%87%BD%E6%95%B0&spm=1000.2123.3001.4430

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_(*^▽^*)_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值