OpenCV常用功能——灰度处理和图像二值化处理

这篇具有很好参考价值的文章主要介绍了OpenCV常用功能——灰度处理和图像二值化处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、灰度处理

1.1 cvtColor函数

函数原型:

cv2.cvtColor(src, code[, dst[, dstCn]]) -> dst

功能:转换图像颜色空间。
参数

  • src: 输入图像。
  • code: 颜色空间转换代码。可以取常量cv2.COLOR_BGR2GRAY或cv2.COLOR_RGB2GRAY。
  • dst: 输出图像。
  • dstCn: 输出图像的通道数,如果设置为0,则跟随转换代码自动设置。

内置函数示例代码:

import cv2
img = cv2.imread("color.jpg")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cv2.imshow("Gray", img_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

灰度处理的原理是将彩色图像转换成灰度图像,通常使用的方法是将彩色图像的RGB三个通道的值加权平均,得到一个灰度值,再用这个灰度值代替RGB三个通道的值,从而得到灰度图像。常用的加权平均公式是:
g r a y = 0.299 × R + 0.587 × G + 0.114 × B gray = 0.299 \times R + 0.587 \times G + 0.114 \times B gray=0.299×R+0.587×G+0.114×B
其中, R 、 G 、 B R、G、B RGB分别是彩色图像的红、绿、蓝通道的值, 0.299 、 0.587 、 0.114 0.299、0.587、0.114 0.2990.5870.114是加权系数,这些系数是心理物理学中根据人眼对不同颜色敏感度的实验结果得出的。这个公式也称为亮度加权法,能够比较好地保留彩色图像的明暗对比度。

通过原理实现灰度处理代码:

import cv2
img = cv2.imread('lean.jpg')
img = cv2.resize(img, (240, 240), interpolation=cv2.INTER_CUBIC)
height, width = img.shape[:2]
gray = np.zeros((height, width, 1), dtype="uint8")
for i in range(height):
    for j in range(width):
        gray[i][j] = img[i][j][0] * 0.114 + img[i][j][1] * 0.587 + img[i][j][2] * 0.299  # 加权值法
        # gray[i][j] = (img[i][j][0] +img[i][j][1]+img[i][j][2])/3#平均值法
        # gray[i][j] = max(img[i][j][0],img[i][j][1],img[i][j][2]) #最大值法
        
cv2.imshow("Gray", gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码逐个像素点计算灰度值,然后用灰度值代替RGB三个通道的值,得到灰度图像并显示出来。值得注意的是,这种方法虽然简单易懂,但计算每个像素点的灰度值,效率较低,不适用于处理较大的图像。在实际中,我们可以使用OpenCV提供的函数来实现灰度处理,以提高程序的执行效率。

注意:灰度图像在Python中数据类型是numpy的uint8类型,即8位无符号整型。

二、图像二值化处理

图像二值化处理是将灰度图像上的像素点转化为黑白两种颜色的处理方法。其原理是将灰度图像的像素值按一定的阈值进行分割,大于等于阈值的像素值设为一个值(通常是255),小于阈值的像素值设为另一个值(通常是0)。这样得到的图像就只有黑白两种颜色,便于进行一些形态学处理和特征提取。

图像二值化有两种方法:全局阈值和自适应阈值全局阈值是指将整个图像的像素值都按照同一个阈值进行分割,而自适应阈值则是将图像分割成若干个小块,然后对每个小块单独计算阈值,从而得到更准确的分割结果。下面分别介绍这两种方法的实现方式。

2.1 全局阈值

在OpenCV中,使用cv2.threshold()函数可以实现全局阈值二值化。函数原型如下:

retval, dst = cv2.threshold(src, thresh, maxval, type)

参数说明:

  • src为输入图像,必须为灰度图。
  • dst为输出图像,尺寸和类型与原图像相同。
  • thresh为设定的阈值。
  • maxval为最大值,当像素值大于阈值时,赋值为maxval。
  • type为阈值处理的类型,包括以下几种类型:
    • cv2.THRESH_BINARY:二值化,当像素值大于阈值时,赋值为maxval,否则赋值为0。
    • cv2.THRESH_BINARY_INV:反二值化,当像素值大于阈值时,赋值为0,否则赋值为maxval。
    • cv2.THRESH_TRUNC:截断,当像素值大于阈值时,赋值为阈值,否则不变。
    • cv2.THRESH_TOZERO:阈值以下归零,当像素值小于阈值时,置为0,否则不变。
    • cv2.THRESH_TOZERO_INV:阈值以上归零,当像素值大于阈值时,置为0,否则不变。

示例代码如下:

import cv2

# 加载灰度图
img_gray = cv2.imread('lena_gray.jpg', 0)

# 全局阈值二值化
retval, img_binary = cv2.threshold(img_gray, 128, 255, cv2.THRESH_BINARY)

# 显示图像
cv2.imshow('original', img_gray)
cv2.imshow('binary', img_binary)
cv2.waitKey()
cv2.destroyAllWindows()

其中,使用cv2.imread()加载灰度图时,第二个参数必须设置为0,表示加载灰度图。

2.2 自适应阈值

在OpenCV中,使用cv2.adaptiveThreshold()函数可以实现自适应阈值二值化。函数原型和前面的cv2.threshold()函数类似,但多了两个参数:

dst = cv2.adaptiveThreshold(src, maxval, adaptiveMethod, thresholdType, blockSize, C)

参数说明:

  • src为输入图像,必须为灰度图。
  • maxValue为最大值,当像素值大于阈值时,赋值为maxValue。
  • adaptiveMethod为自适应阈值算法类型,包括以下两种类型:
    • cv2.ADAPTIVE_THRESH_MEAN_C:计算每个小区域的平均灰度值作为阈值。
    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C:计算每个小区域的高斯加权平均灰度值作为阈值。
  • thresholdType为阈值处理的类型,同全局阈值二值化函数。
  • blockSize为块大小,要求为奇数,代表自适应阈值计算时使用的小区域大小。
  • C为常数,阈值减小的常数。
    实例代码如下:
import cv2

# 加载灰度图
img_gray = cv2.imread('lena_gray.jpg', 0)

# 自适应阈值二值化
img_binary = cv2.adaptiveThreshold(
    img_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 127, 1)

# 显示图像
cv2.imshow('original', img_gray)
cv2.imshow('binary', img_binary)
cv2.waitKey()
cv2.destroyAllWindows()

其中,使用cv2.ADAPTIVE_THRESH_MEAN_C作为自适应阈值算法,计算每个小块的平均值;使用cv2.THRESH_BINARY作为阈值处理的类型。阈值大小由blockSizeC两个参数共同决定,可以通过调整这两个参数来得到更适合的分割效果。文章来源地址https://www.toymoban.com/news/detail-718326.html

到了这里,关于OpenCV常用功能——灰度处理和图像二值化处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • opencv图片灰度二值化

    opencv图片灰度二值化

    2024年02月13日
    浏览(14)
  • C#使用OpenCv(OpenCVSharp)图像局部二值化处理实例

      本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行局部二值化处理。 目录 图像二值化原理 局部二值化 自适应阈值 实例 效果

    2024年02月13日
    浏览(14)
  • C#使用OpenCv(OpenCVSharp)图像全局二值化处理实例

    本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行全局二值化处理。 目录 图像二值化原理 函数原型 参数说明 实例 效果

    2024年02月13日
    浏览(12)
  • OpenCV-Python学习(10)—— OpenCV 图像二值化处理(cv.threshold)

    OpenCV-Python学习(10)—— OpenCV 图像二值化处理(cv.threshold)

    1. 学习目标 理解图像的分类,不同类型的图像的区别; 对图像进行二值化处理,对【 cv.threshold 】函数的理解。 2. 图像分类 2.1 不同类型图像说明 按照颜色对图像进行分类,可以分为二值图像、灰度图像和彩色图像。 二值图像: 只有黑色和白色两种颜色的图像。 每个像素

    2024年02月03日
    浏览(46)
  • OPENCV C++(三)二值化灰度函数+调用摄像头+鼠标响应+肤色检测

    图像 目标图像 rgb转灰度 灰度图,目标图,阈值,大于阈值的转换的像素值,方法为大津法 灰度图,目标图,大于阈值的转换的像素值,自适应方法,二值化方法 虽然人物的信息丢失了很多,但是背景基本上被去掉了。丢失的人物的信息可以通过位运算等恢复。在去除背景

    2024年02月14日
    浏览(67)
  • opencv(20) 图像阈值(二值化)

    opencv(20) 图像阈值(二值化)

    二值化核心思想,设阈值,大于阈值的为0(黑色)或 255(白色),使图像称为黑白图。 阈值可固定,也可以自适应阈值。 自适应阈值一般为一点像素与这点为中序的区域像素平均值或者高斯分布加权和的比较,其中可以设置一个差值也可以不设置。 图像的阈值化旨在提取

    2024年02月02日
    浏览(9)
  • OpenCV(八):图像二值化

    OpenCV(八):图像二值化

    目录 1.固定值二值化 2.自适应阈值二值化 3.Android JNI完整代码 1.固定值二值化 固定阈值二值化是OpenCV中一种简单而常用的图像处理技术,用于将图像转换为二值图像。在固定阈值二值化中,像素值根据一个预定义的阈值进行分类,大于阈值的像素被设置为白色,而小于或等于

    2024年02月10日
    浏览(12)
  • [2] 图像处理之----二值化处理

    [2] 图像处理之----二值化处理

    简单阈值是选取一个全局阈值,然后把整幅图像分成非黑即白的二值图像,灰度值大于阈值就赋为255反之为0。 ret,mask = cv2.threshold(img2gray,175,255,cv2.THRESH_BINAR) 返回值一: 阈值,(Otsu‘s二值化会用到) 返回值二: 处理以后的图像 参数一: 初始图像 参数二:我们自己设定的阈

    2024年02月05日
    浏览(14)
  • 图像二值化算法

    图像二值化算法

    图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。二值图像每个像素只有两种取值:要么纯黑,要么纯白。进行二值化有多种方式,其中最常用的就是采用阈值法(Thresholding)进行二值化。 根据阈值

    2024年02月06日
    浏览(11)
  • 使用OpenCV C++进行图像二值化操作

    使用OpenCV C++进行图像二值化操作

    threshold()将固定阈值应用于多通道图像阵列,通常用于从灰度图像中获得二值图像或用于去除噪声,即滤除值过小或过大的像素。该函数支持几种类型的阈值设置,它们由类型参数决定。 src:输入数组(多通道,8位或32位浮点数) dst:输出数组(与src的尺寸、类型、通道数相

    2024年02月03日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包