欢迎访问欧博亚洲(Allbet Game)!

首页科技正文

ug环球充值:Python 图像处置 OpenCV (6):图像的阈值处置

admin2020-06-0519

前文传送门:

「Python 图像处置 OpenCV (1):入门」

「Python 图像处置 OpenCV (2):像素处置与 Numpy 操作以及 Matplotlib 显示图像」

「Python 图像处置 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处置」

「Python 图像处置 OpenCV (4):图像算数运算以及修改颜色空间」

「Python 图像处置 OpenCV (5):图像的几何变换」

图像的阈值

看到这个词可能人人都很懵,为啥在图像处置内里还会有阈值。

图像的阈值处置用大白话讲就是将图像转化为二值图像(是非图),目的是用来提取图像中的目的物体,将靠山和噪声区离开(可以近似的以为除了目的全是噪声)。

通常会设定一个阈值 T ,通过 T 将图像的像素划分为两类:大于 T 的像素群和小于 T 的像素群。

首先可以先将图像转化为灰度图像,由于在灰度图像中,每个像素都只有一个灰度值用来示意当前像素的亮度。

接下来二值化处置可以将图像中的像素划分为两类颜色,一种是大于阈值 T 的,另一种是小于阈值 T 的。

好比最常见的二值图像:

当灰度值小于阈值 T 的时刻,可以将其像素设置为 0 ,示意为玄色。

当灰度值大于阈值 T 的时刻,可以将其像素设置为 255 ,示意为白色。

在 OpenCV 中,为我们提供了阈值函数 threshold() 来辅助我们实现二值图像的处置。

函数如下:

retval, dst = threshold(src, thresh, maxval, type, dst=None)
  • retval: 阈值
  • dst: 处置后的图像
  • src: 原图像
  • thresh: 阈值
  • maxval: 最大值
  • type: 处置类型

常用的 5 中处置类型如下:

  • cv.THRESH_BINARY: 二值处置
  • cv.THRESH_BINARY_INV: 反二值处置
  • cv.THRESH_TRUNC: 截断阈值化
  • cv.THRESH_TOZERO: 阈值化为 0
  • cv.THRESH_TOZERO_INV: 反阈值化为 0

接下来这几种处置类型有啥差别,我们一个一个来看。

二值处置

这种二值处置方式最最先需要选定一个阈值 T ,从 0 ~ 255 之间,我这里选择出于中心的那个数 127 。

接下来的处置规则就是这样的:

  • 大于即是 127 的像素点的灰度值设定为最大值,也就是 255 白色
  • 小于 127 的像素点的灰度值设定为 0 ,也就是玄色

接下来最先写代码,看我们的马里奥同砚(不知道你们还记不记得我们的马里奥同砚):

import cv2 as cv

src = cv.imread("maliao.jpg")

# BGR 图像转灰度
gray_img = cv.cvtColor(src, cv.COLOR_BGR2GRAY)

# 二值图像处置
r, b = cv.threshold(gray_img, 127, 255, cv.THRESH_BINARY)

# 显示图像
cv.imshow("src", src)
cv.imshow("result", b)

# 守候显示
cv.waitKey(0)
cv.destroyAllWindows()

反二值处置

这种方式和上面的二值处置异常相似,只是把处置规则给反了一下:

  • 大于即是 127 的像素点的灰度值设定为 0 ,也就是白色
  • 小于 127 的像素点的灰度值设定为最大值,也就是 255 白色

完整代码如下:

import cv2 as cv

src = cv.imread("maliao.jpg")

# BGR 图像转灰度
gray_img = cv.cvtColor(src, cv.COLOR_BGR2GRAY)

# 二值图像处置
r, b = cv.threshold(gray_img, 127, 255, cv.THRESH_BINARY_INV)

# 显示图像
cv.imshow("src", src)
cv.imshow("result", b)

# 守候显示
cv.waitKey(0)
cv.destroyAllWindows()

从图像上可以看到,颜色和上面的二值图像正好相反,大部门的位置都变成了白色。

截断阈值化

这种方式照样需要先选定一个阈值 T ,图像中大于该阈值的像素点被设定为该阈值,小于该阈值的保持稳定。

完整代码如下:

import cv2 as cv

src = cv.imread("maliao.jpg")

# BGR 图像转灰度
gray_img = cv.cvtColor(src, cv.COLOR_BGR2GRAY)

# 二值图像处置
r, b = cv.threshold(gray_img, 127, 255, cv.THRESH_TRUNC)

# 显示图像
cv.imshow("src", src)
cv.imshow("result", b)

# 守候显示
cv.waitKey(0)
cv.destroyAllWindows()

ug环球充值:Python 图像处置 OpenCV (6):图像的阈值处置 第1张

这种方式实际上是把图片对照亮的像素处置成为阈值,其他部门保持稳定。

阈值化为 0

这种方式照样需要先选定一个阈值 T ,将小于 T 的像素点设置为 0 玄色,其他的保持稳定。

完整代码如下:

import cv2 as cv

src = cv.imread("maliao.jpg")

# BGR 图像转灰度
gray_img = cv.cvtColor(src, cv.COLOR_BGR2GRAY)

# 二值图像处置
r, b = cv.threshold(gray_img, 127, 255, cv.THRESH_TOZERO)

# 显示图像
cv.imshow("src", src)
cv.imshow("result", b)

# 守候显示
cv.waitKey(0)
cv.destroyAllWindows()

ug环球充值:Python 图像处置 OpenCV (6):图像的阈值处置 第2张

这个方式是亮的部门不改,把对照暗的部门修改为 0 。

反阈值化为 0

这个和前面的反二值图像很像,同样是反阈值化为 0 ,将大于即是 T 的像素点变为 0 ,其余保持稳定。

完整代码如下:

import cv2 as cv

src = cv.imread("maliao.jpg")

# BGR 图像转灰度
gray_img = cv.cvtColor(src, cv.COLOR_BGR2GRAY)

# 二值图像处置
r, b = cv.threshold(gray_img, 127, 255, cv.THRESH_TOZERO_INV)

# 显示图像
cv.imshow("src", src)
cv.imshow("result", b)

# 守候显示
cv.waitKey(0)
cv.destroyAllWindows()

ug环球充值:Python 图像处置 OpenCV (6):图像的阈值处置 第3张

这个方式是暗的部门不改,把对照亮的部门修改为 0 。

全家福

接下来照样给这几种阈值处置后的图像来个全家福,让人人能有一个直观的感受,代码我也给出来,如下:

import cv2 as cv
import matplotlib.pyplot as plt

# 读取图像
img=cv.imread('maliao.jpg')
lenna_img = cv.cvtColor(img,cv.COLOR_BGR2RGB)
gray_img=cv.cvtColor(img,cv.COLOR_BGR2GRAY)

# 阈值化处置
ret1, thresh1=cv.threshold(gray_img, 127, 255, cv.THRESH_BINARY)
ret2, thresh2=cv.threshold(gray_img, 127, 255, cv.THRESH_BINARY_INV)
ret3, thresh3=cv.threshold(gray_img, 127, 255, cv.THRESH_TRUNC)
ret4, thresh4=cv.threshold(gray_img, 127, 255, cv.THRESH_TOZERO)
ret5, thresh5=cv.threshold(gray_img, 127, 255, cv.THRESH_TOZERO_INV)

# 显示效果
titles = ['Gray Img','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [gray_img, thresh1, thresh2, thresh3, thresh4, thresh5]

# matplotlib 绘图
for i in range(6):
   plt.subplot(2, 3, i+1), plt.imshow(images[i],'gray')
   plt.title(titles[i])
   plt.xticks([]),plt.yticks([])

plt.show()

ug环球充值:Python 图像处置 OpenCV (6):图像的阈值处置 第4张

示例代码

如果有需要获取源码的同砚可以在民众号回复「OpenCV」举行获取。

参考

https://blog.csdn.net/Eastmount/article/details/83548652

http://www.woshicver.com/

,

Allbet

www.kaiwenpower.com欢迎进入欧博平台(Allbet Gaming),欧博平台开放欧博(Allbet)开户、欧博(Allbet)代理开户、欧博(Allbet)电脑客户端、欧博(Allbet)APP下载等业务。

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源:欧博亚洲(Allbet Game)!

本文链接:http://www.czshenhaifb.com/post/1203.html

网友评论

最新评论

  • AllbetGmaing官网 08/10 说:

    欧博开户欢迎进入欧博开户平台(Allbet Game):www.aLLbetgame.us,欧博开户平台开放欧博Allbet开户、欧博Allbet代理开户、欧博Allbet电脑客户端、欧博AllbetAPP下载等业务。反复看不腻

  • AllbetGmaing官网 08/10 说:

    欧博开户欢迎进入欧博开户平台(Allbet Game):www.aLLbetgame.us,欧博开户平台开放欧博Allbet开户、欧博Allbet代理开户、欧博Allbet电脑客户端、欧博AllbetAPP下载等业务。反复看不腻

  • Allbet开户 08/09 说:

    欧博开户网址欢迎进入欧博开户网址(Allbet Gaming):www.aLLbetgame.us,欧博网址开放会员注册、代理开户、电脑客户端下载、苹果安卓下载等业务。我感觉我升华了,哈哈

  • 联博开奖网 08/09 说:

    联博www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。很6的写法

  • 欧博官网手机版 08/08 说:

    Allbet代理欢迎进入Allbet代理(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。啊接下来发生啥了

  • 欧博官网手机版 08/08 说:

    Allbet代理欢迎进入Allbet代理(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。啊接下来发生啥了

  • UG环球APP下载 08/08 说:

    allbet欧博真人客户端欢迎进入allbet欧博真人客户端(Allbet Game):v,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。马克一下,怕忘了

  • AllbetGmaing电脑版下载 08/08 说:

    联博以太坊www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。我有的是时间,继续看