计算机眼中的图像处理基础:灰度化与二值化实验详解

article/2025/6/18 10:37:51

      在计算机视觉和图像处理领域,理解计算机如何"看"图像是基础中的基础。本文将详细介绍图像处理中的两个核心概念:灰度化和二值化,并通过实验方法展示不同算法的效果差异。

一、计算机眼中的图像

1. 像素

像素(Pixel)是图像的基本单元,每个像素包含颜色信息。在彩色图像中,通常使用RGB(红绿蓝)三通道表示,每个通道取值范围为0-255。(注意:这里的b是blue,而不是black)

import cv2
import numpy as np# 创建一个3x3的红色像素块
red_pixel = np.zeros((3, 3, 3), dtype=np.uint8)
red_pixel[:, :, 2] = 255  # OpenCV使用BGR格式,所以索引2是红色通道,[所有行、列的第二个元素值为255]
cv2.imshow('Red Pixel Block', red_pixel)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

2. 图像

计算机采用0/1编码的系统,数字图像也是利用0/1来记录信息,我们平常接触的图像都是8位数图像(“8位数图像”通常指的是**颜色深度为8位**的图像,即每个颜色通道(如红、绿、蓝)用8位二进制数(1字节)表示),包含0~255灰度(2⁸=256种可能),其中0,代表最黑,1,表示最白。  

2.1.二值图像(黑白两个颜色:水墨画)

一幅二值图像的二维矩阵仅由0、1两个值构成,“0”代表黑色,“1”代白色。由于每一像素(矩阵中每一元素)取值仅有0、1两种可能,所以计算机中二值图像的数据类型通常为1个二进制位。二值图像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储。

2.2.灰度图(黑色->白色之间:类似于以前的黑白电视机)

每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度(如果用16位,则有65536级)。

 

3.彩色图(现实中看到的图片)

每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的,分量介于(0,255)。RGB图像与索引图像一样都可以用来表示彩色图像。与索引图像一样,它分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。但与索引图像不同的是,RGB图像每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩阵中,由于每一像素的颜色需由R、G、B三个分量来表示,M、N分别表示图像的行列数,三个M x N的二维矩阵分别表示各个像素的R、G、B三个颜色分量。RGB图像的数据类型一般为8位无符号整形,通常用于表示和存放真彩色图像。

 

 图像本质上是一个三维数组(高度×宽度×通道数)。我们可以直接访问和修改像素值:

# 读取图像
img = cv2.imread('example.jpg')
if img is None:# 创建示例图像img = np.zeros((300, 400, 3), dtype=np.uint8)# cv.rectangle(img,leftupperL:右上角坐标,rightdown:左下角坐标,color:颜色矩阵,thickness:线条厚度,默认为1,-1:当thickness取值为-1时,这意味着矩形将被填充,而不是绘制边框。也就是说,整个矩形区域会被指定的颜色填满。)cv2.rectangle(img, (50, 50), (200, 200), (0, 0, 255), -1)  # 红色矩形cv2.circle(img, (300, 150), 80, (0, 255, 0), -1)  # 绿色圆形cv2.putText(img, "Example", (150, 250), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)  # 蓝色文字# 访问像素值
print("左上角像素值(BGR):", img[0, 0])

二、灰度化实验

灰度化是将彩色图像转换为灰度图像的过程,常用方法有:

1. 最大值法

取RGB三个通道中的最大值作为灰度值:
Gray = max(R, G, B)

 

def max_grayscale(img):return np.max(img, axis=2)gray_max = max_grayscale(img)
cv2.imshow('Max Grayscale', gray_max)
cv2.waitKey(0)

2. 平均值法

取RGB三个通道的平均值作为灰度值:
Gray = (R + G + B) / 3

def mean_grayscale(img):return np.mean(img, axis=2).astype(np.uint8)gray_mean = mean_grayscale(img)
cv2.imshow('Mean Grayscale', gray_mean)
cv2.waitKey(0)

 

3. 加权均值法

考虑人眼对不同颜色的敏感度,使用加权平均:
Gray = 0.299*R + 0.587*G + 0.114*B

def weighted_grayscale(img):# 使用OpenCV内置函数return cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)gray_weighted = weighted_grayscale(img)
cv2.imshow('Weighted Grayscale', gray_weighted)
cv2.waitKey(0)

 

4. 两个极端的灰度值

可以尝试只保留最亮或最暗的像素:

  • 仅保留最大值:所有像素设为255

  • 仅保留最小值:所有像素设为0

gray_white = np.full_like(gray_weighted, 255)
gray_black = np.zeros_like(gray_weighted)cv2.imshow('Extreme White', gray_white)
cv2.imshow('Extreme Black', gray_black)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、二值化实验

二值化是将灰度图像转换为只有黑白两色的图像,以下是六种常用方法:

1.普通阈值法:设定一个阈值,低于等于阈值就变成0,超过阈值就设为给定的最大值

2.反阈值法:故名思意,和普通阈值法相反,超过阈值的变成0,低于等于的设为给定的最大值

3.截断阈值法:设定一个阈值,低于等于阈值的不改变,超过阈值的设为阈值

4.低阈值零处理:故名思意,低于等于阈值的设为0,超过阈值的不变

5.超阈值零处理:故名思意,超过阈值的设为0,低于等于阈值的不变

6.OTSU 阈值法:自动确定图像二值化最优阈值的算法,它基于图像灰度直方图,通过最大化类间方差来找到一个阈值,使前景和背景的分离效果达到最佳

# 首先转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 1. 普通阈值法
_, thresh_binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 2. 反阈值法
_, thresh_binary_inv = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)# 3. 截断阈值法
_, thresh_trunc = cv2.threshold(gray, 127, 255, cv2.THRESH_TRUNC)# 4. 低阈值零处理
_, thresh_tozero = cv2.threshold(gray, 127, 255, cv2.THRESH_TOZERO)# 5. 超阈值零处理
_, thresh_tozero_inv = cv2.threshold(gray, 127, 255, cv2.THRESH_TOZERO_INV)# 6. OTSU自动阈值法
_, thresh_otsu = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 显示所有结果
results = [gray, thresh_binary, thresh_binary_inv, thresh_trunc, thresh_tozero, thresh_tozero_inv, thresh_otsu]
titles = ['Gray', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV', 'OTSU']for i in range(7):cv2.imshow(titles[i], results[i])cv2.waitKey(500)  # 每个显示0.5秒cv2.destroyAllWindows()

 

四、自适应二值化

自适应二值化能处理光照不均的图像,以下是两种实现方式:

1. 取均值法

使用邻域均值作为阈值,块大小必须是奇数

adaptive_mean = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY, 11, 2)  # 11是块大小,2是从均值中减去的常数cv2.imshow('Adaptive Mean', adaptive_mean)
cv2.waitKey(0)

 

2. 高斯加权法

使用高斯加权和作为阈值,更注重中心像素

adaptive_gauss = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY, 11, 2)cv2.imshow('Adaptive Gaussian', adaptive_gauss)
cv2.waitKey(0)
cv2.destroyAllWindows()

 五、完整可运行代码

 

import cv2
import numpy as npdef main():# 读取或创建图像img = cv2.imread('example.jpg')if img is None:img = np.zeros((300, 400, 3), dtype=np.uint8)cv2.rectangle(img, (50, 50), (200, 200), (0, 0, 255), -1)cv2.circle(img, (300, 150), 80, (0, 255, 0), -1)cv2.putText(img, "Example", (150, 250), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)# 灰度化实验gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)gray_max = np.max(img, axis=2)gray_mean = np.mean(img, axis=2).astype(np.uint8)cv2.imshow('Original', img)cv2.imshow('OpenCV Gray', gray)cv2.imshow('Max Gray', gray_max)cv2.imshow('Mean Gray', gray_mean)cv2.waitKey(0)# 二值化实验_, thresh_binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)_, thresh_otsu = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)cv2.imshow('Binary', thresh_binary)cv2.imshow('OTSU', thresh_otsu)cv2.waitKey(0)# 自适应二值化adaptive = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY, 11, 2)cv2.imshow('Adaptive', adaptive)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == "__main__":main()

 

六、应用场景与总结

  1. 灰度化应用

    • 人脸检测前的预处理

    • 降低计算复杂度

    • 某些算法需要单通道输入

  2. 二值化应用

    • 文档扫描和OCR

    • 图像分割

    • 边缘检测预处理

  3. 方法选择建议

    • 光照均匀:普通阈值法或OTSU法

    • 光照不均:自适应二值化

    • 需要保留部分灰度信息:截断阈值法

     本文介绍的方法都是图像处理的基础操作,理解这些原理对后续学习更高级的图像处理技术至关重要。建议读者动手实践,调整参数观察不同效果。


http://www.hkcw.cn/article/jOkqEfXpbR.shtml

相关文章

OpenCV学习路线全解析!从入门图像处理到计算机视觉实战,搭建你的视觉AI技能体系

想进入计算机视觉领域,OpenCV 几乎是绕不开的第一站。它是一个开源的视觉工具库,拥有丰富的图像处理、识别、追踪等能力,被广泛用于教育、科研和工业场景。 但 OpenCV 功能强大,文档复杂,很多初学者“安装完不知道干啥…

图像处理——卷积

一、什么是卷积 卷积可以理解为两个函数f和g的重叠运算,通过将一个函数翻转并滑动到另一个函数上,计算它们在重叠点的乘积并求和,从而生成一个新的函数。数学上,卷积的表达式通常为: (f∗g)(t)∫−∞∞​f(τ)g(t−τ)…

【图像轮廓特征查找】图像处理(OpenCV) -part8

17 图像轮廓特征查找 图像轮廓特征查找其实就是他的外接轮廓。 应用: 图像分割 形状分析 物体检测与识别 根据轮廓点进行,所以要先找到轮廓。 先灰度化、二值化。目标物体白色,非目标物体黑色,选择合适的儿值化方式。 有了轮…

CImage类在VS2010中的应用与图像处理教程

本文还有配套的精品资源,点击获取 简介:本文旨在介绍如何在Visual Studio 2010中使用MFC库的CImage类进行图像处理。首先概述了CImage类的功能,然后详细讲解了加载、显示、保存图像以及进行裁剪、缩放、旋转等操作的方法。提供了示例代码&a…

【机器学习】图像处理与深度学习利器:OpenCV实战攻略全面解析

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 前言 OpenCV想必大家都听过跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而…

机器学习中的图像处理与计算机视觉

引言 在现代计算机科学中,图像处理和计算机视觉已成为最活跃的研究领域之一,这得益于机器学习和深度学习的发展。本文将深入探讨图像处理与计算机视觉的基础概念、常见应用、关键技术、常用工具,以及在这些领域中的代码示例。通过本篇文章&a…

Fiji —— 基于 imageJ 的免费且开源的图像处理软件

文章目录 一、Fiji —— 基于 imageJ 的免费且开源的图像处理软件1.1、Fiji工具安装(免费)1.2、Fiji源码下载1.2、Fiji - Plugins插件安装 二、功能详解2.0、Fiji - ImageJ(Web应用程序)2.1、常用功能(汇总&#xff09…

深入了解 OpenCV:C# 开发者的图像处理利器

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉与图像处理库,自 2000 年由 Intel 开发以来,已经发展成为业界领先的图像处理框架之一。凭借其跨平台特性、丰富的功能集以及活跃的社区支持,OpenCV…

巴黎世家平角短裤造型裙子已缺货 时尚争议再起

近日,奢侈品牌巴黎世家推出的一款售价4500元的女款半身裙在网上引发热议。不少网友吐槽该裙子造型与平角短裤极为相似,直呼“看不懂时尚”。据巴黎世家官网介绍,这款深蓝色弹力平纹针织半身裙亮相于2025秋季系列Look 50和Look 54。裙子采用弹力棉混纺平纹针织面料,设计为平…

日本男子杀害妻子幼女后自杀 家庭悲剧震惊邻里

6月2日上午,日本大阪府吹田市发生一起悲剧。一名26岁男子从世博会馆附近的一座天桥上跳下自杀。警方随后在其家中发现了他妻子和两名幼女的尸体,三人腹部血流不止,已经死亡。现场还发现了一把带血的菜刀和一张字条,字条上写着对女儿和妻子的歉意。据警方透露,当天早上6点2…

女婴术后脑损伤疑撞到床栏 家属求真相艰难

近日,四川的徐女士反映,她五个多月大的孩子鱼鱼在四川大学华西第二医院锦江院区做完心脏手术后,头部出现了一个创口。经检查,鱼鱼被诊断为脑出血和脑损伤,并伴有癫痫。当地卫健委介入调查后未能得出明确结论。5月29日,记者在事发医院见到已经一岁多的鱼鱼,她仍旧不会爬行…

A股六月开门红 三大指数集体反弹

端午节三天小长假后,六月首个交易日A股三大指数集体反弹,给股民朋友们带来了一个“开门红”。这是继五月“开门红”之后,A股再度取得月度良好开局。截至收盘,沪指涨0.43%,深成指涨0.16%,创业板指涨0.48%,北证50指数涨1.03%。全市场成交额达到11638亿元,较上日放量4亿元…

端午节假期国内出游1.19亿人次 文旅融合添彩传统节日

文化和旅游部6月3日公布了2025年端午节假期文化和旅游市场的情况。经测算,假期三天内,全国国内出游人数达到1.19亿人次,同比增长5.7%;国内出游总花费为427.30亿元,同比增长5.9%。在假期期间,群众积极参与赛龙舟、吃粽子、唱山歌和赏古曲等活动,传统节日文化内涵与旅游发…

乌克兰袭击克里米亚大桥 画面曝光 大桥严重受损

据乌克兰独立新闻社等媒体6月3日报道,乌克兰方面对克里米亚大桥发动了袭击。乌克兰国家安全局表示,克里米亚大桥在这次袭击中严重受损。截至报道时,俄罗斯官方尚未对此消息作出公开回应。责任编辑:0764

媒体评游客因小孩进入拍摄画面打架 迪士尼冲突引热议

5月31日,有网友发布视频称,在上海迪士尼疯狂动物城园区内,一对情侣和一家三口发生肢体冲突。视频中显示,双方在现场扭打,周围游客纷纷上前劝阻。6月1日晚,上海市公安局浦东分局通报了此事。据通报,5月31日18时许,浦东公安分局接到报警,称迪士尼乐园内有人打架。经初步…

广州即将进入“蒸烤”模式 高温晴热天气来袭

广东省气象部门预计,端午假期最后一天起的新一轮“龙舟水”强降水过程将在4日开始减弱。在本轮“龙舟水”减弱前,广东各地仍需防御风雨影响;即使在“龙舟水”减弱后,仍需警惕地质灾害发生。此外,在“龙舟水”间歇期,广东各地还需留意高温天气。根据广东省气象部门的观测和…

南海部分海域有火箭残骸坠落 航行警告发布

据中国海事局消息,清澜海事局发布航行警告,6月4日0时至6月6日24时,南海部分海域将有火箭残骸掉落,禁止驶入。责任编辑:0764

当年他步行3公里送歼-10原型机首飞 见证中国航空辉煌

我国自主研发的出口型战斗机歼-10CE在国际地区冲突中表现出色,引起了国际军贸市场的广泛关注。这款由成都所设计、成飞制造的单发单座多用途战斗机具备体系协同作战能力,在强电磁对抗环境下可进行超视距多目标攻击及多模式对地精确打击。在机库中,记者见到了参与歼-10飞机研…

郑钦文不敌萨巴伦卡止步法网8强 期待不断突破

6月3日17时,2025法网女单1/4决赛中,郑钦文以0-2不敌赛会头号种子萨巴伦卡。首盘比赛中,双方各破对方一个发球局,最终在抢七中,郑钦文以6-7(3)失利。这场比赛是郑钦文与萨巴伦卡的第8次交手。此前的6次对决中,郑钦文均未能取胜,因此萨巴伦卡被视为她职业生涯中的一座“…

吴京的车又翻了 生活中的小插曲

6月3日,吴京发文调侃自己再次翻车,称“哈哈一不留神,一个小断头,啪…..生活中不也是经常这样嘛….”此前在5月27日凌晨,吴京曾深夜发文表示:“安全完成SS5赛段。又翻车了,但人没事儿!大家放心!”责任编辑:0764