Python----OpenCV(图像处理——图像的多种属性、RGB与BGR色彩空间、HSB、HSV与HSL、ROI区域)

Python----计算机视觉处理(opencv:像素,RGB颜色,图像的存储,opencv安装,代码展示)

Python----计算机视觉处理(Opencv:图片颜色识别:RGB颜色空间,HSV颜色空间,掩膜)

Python----计算机视觉处理(Opencv:ROI图像切割)

一、图像的多种属性

图像的多种属性 图像处理涉及到多种属性,这些属性可以帮助我们分析和理解图像的内 容。以下是图像的一些常见属性,它们在图像分类、分割、增强等任务中都起到了至关重要 的作用。

1.1、图像分类

1.1.1、二值图像

二值图像表示的意思就是每一个像素点只由0和1构成,0表示黑色,1表示白色,而且这里 的黑色和白色是纯黑和纯白。

1.1.2、灰度图像

灰度图像就是一个8位的位图。什么意思呢?就是说00000001一直到11111111,这就是二 进制表示。如果表示成我们常用的十进制就是0-255。其中0就表示纯黑色,255就表示纯白 色,中间就是处于纯黑色到纯白色的相关颜色。

1.1.3、彩色图像

计算机中所有的颜色都可以由R(红色通道)、G(绿色通道)、B(蓝色通道)来组成,其 中每一个通道都有0-255个像素颜色组成。比如说R=234,G=252,B=4就表示黄色。显示 出来的也是黄色。所以说彩色图像由三个面构成,分别对应R,G,B。

1.2、颜色属性

1.2.1、颜色空间

图像的颜色可以用不同的颜色空间表示,常见的颜色空间包括:

RGB:红色、绿色和蓝色三个通道组成,适用于显示设备。

HSV:色调、饱和度和亮度组成,适用于图像分割任务。

Grayscale(灰度):没有颜色信息,仅有亮度信息。

YCbCr:亮度(Y)和色差(Cb、Cr)分量,常用于视频编码。

1.2.2、色调(Hue)

色调是指颜色的种类,通常用于描述色彩本身的感知。例如,红色、绿色、蓝色等。

饱和度(Saturation) 饱和度表示颜色的强度或纯度,饱和度越高,颜色越鲜艳。

亮度(Brightness / Value) 亮度表示颜色的明亮程度,通常用于描述光的强度。

1.3、 几何属性

尺寸(Size) 图像的宽度和高度,通常以像素为单位。

分辨率(Resolution) 图像的清晰度,通常由每英寸的像素数(DPI)来表示。较高的 分辨率意味着图像的细节更多。

比例(Aspect Ratio) 图像宽高的比例,影响图像的呈现效果和视觉感受。

常见比例:

1:1(正方形)

4:3(标准电视和旧型电视屏幕比例)

16:9(宽屏)

3:2(数码相机和手机照片比例)

21:9(超宽屏)

1.4、纹理属性

纹理(Texture)是指图像中表面特征的模式或结构,它描述了图像中的细节,如粗糙、平 滑、条纹、波纹等。

纹理的特点:

平滑或粗糙:图像的表面可能是平滑的,也可能是粗糙的。平滑的纹理通常表示图像中像素值变化较小,粗糙的纹理表示像素值变化较 大。

重复性:纹理常常呈现规律性或重复模式,像是平铺的砖块、树皮的纹路等。通过重复性,计算机可以通过算法来识别出特定的纹理。

方向性:纹理可能具有一定的方向性,例如条纹、波纹等。方向性纹理的分析能够提供图像中物体或区域的结构信息。

尺度:纹理的特征可能在不同的尺度上有所不同。某些纹理可能在大尺度下清晰可见,而在小尺度下则难以辨认。

二、RGB与BGR色彩空间

OpenCV和PIL读取图片的格式分别是BGR和RGB。

OpenCV默认通道是BGR的。这是OpenCV的入门大坑之一,BGR是个历史遗留问题, 为了兼容早年的某些硬件,OpenCV也不好改回来了。
安装PIL

PIL 软件包提供了基本的图像处理功能,如:改变图像大小,旋转图像,图像格式转换,色 场空间转换,图像增强,直方图处理,插值和滤波等等。

复制代码
pip install Pillow
python 复制代码
import cv2
from PIL import Image
import numpy as np

img1=cv2.imread('./images/parrot.png')

img2=np.array(Image.open('./images/parrot.png'))

print('cv',img1[:10])
'''
cv [[[ 96 142 150]
  [ 87 134 142]
  [ 81 134 144]
'''
print('Image',img2[:10])
'''
Image [[[150 142  96]
  [142 134  87]
  [144 134  81]
'''

如何将RGB与BGR进行转换

颜色变换是imgproc模块中一个常用的功能。我们生活中大多数看到的彩色图片都是RGB类 型的,但是在进行图像处理时需要用到灰度图、二值图、HSV、HSI等颜色制式,OpenCV 提供了cvtColor0函数来实现这些功能。

python 复制代码
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

三、HSB、HSV与HSL

3.1、RGB 的局限性

RGB 是我们接触最多的颜色空间,由三个通道表示一幅图像,分别为红色(R),绿色(G)和蓝 色(B)。

理由:

与人眼感知不完全匹配

无法准确表示所有颜色

色彩调节不直观

设备依赖性强

3.2、HSB、HSV与HLS概念定义

HSB 和 HSV 基本上是相同的,差异主要是在命名上,而实际应用中,HSB 有时用来表示与 光的亮度相关的概念。

HSB 为 色相,饱和度,明度;

HLS 为 色相,饱和度,亮度,

HSV 为 色相,饱和度,明度。

H : 指的是色相(Hue),就是颜色名称,例如"红色"、"蓝色",、"绿色";

S : 指的是饱和度(Saturation),即颜色的纯度;

L : (Lightness) 和 B(Brightness)是明度,颜色的明亮程度

python 复制代码
import cv2

img1=cv2.imread('./images/parrot.png')
img2=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
img3=cv2.cvtColor(img1,cv2.COLOR_BGR2HLS)
img4=cv2.cvtColor(img1,cv2.COLOR_BGR2HSV)

cv2.imshow('BGR',img1)
cv2.imshow('RGB',img2)
cv2.imshow('HLS',img3)
cv2.imshow('HSV',img4)
cv2.waitKey(0)

四、ROI区域

在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区域 (Region of Interest,ROI)。在设定感兴趣区域 ROI 后,就可以对该区域进行整体操 作。在机器视觉、图像处理等领域,ROI是一个重要的概念,常用于目标检测、图像分割和 物体跟踪等任务中。

4.1、切片操作

Python 中的切片操作允许你从数组中提取子数组(子图像)。切片的语法是[startend,意味着从 start 开始,到 end-1 结束。

python 复制代码
roi = img[20:230, 130:300, :]

20:230 :提取图像的行范围。这里表示从第 20 行到第 230 行(包含 20 行,直到 229 行),这是从图像中提取的垂直区域 (即图像的高度部分)。

130:300 :提取图像的列范围。这里表示从第 130 列到第 300 列(包含 130 列,直到 299 列),这是从图像中提取的水平区域 (即图像的宽度部分)。

: :这表示所有的通道。即不限制颜色通道,提取所有的颜色通道(通常是 BGR,即蓝色、绿色、红色三个通道)。

4.2、ROI

python 复制代码
import cv2

# 读取图像
img = cv2.imread('./images/ROI.png')

# 打印图像的形状(高度、宽度、通道数)
# 例如:(400, 600, 3) 表示高400像素,宽600像素,3个颜色通道(BGR)
print(img.shape)

# 将图像特定区域的蓝色通道(索引为0)设置为0
# 区域定义:从行20到行229,从列130到列299
# [20:230] 表示从第20行开始,到第230行(不包含230行)
# [130:300] 表示从第130列开始,到第300列(不包含300列)
# [0] 表示蓝色通道(OpenCV默认是BGR顺序,所以0是蓝色)
img[20:230, 130:300, 0] = 0

# 提取图像的感兴趣区域(Region of Interest, ROI)
# 这个ROI是原始图像中蓝色通道被设置为0的同一块区域
roi = img[20:230, 130:300, :]

# 创建ROI的副本
# 这一步很重要,因为如果不使用.copy(),那么对roi的修改也会影响到原始的img图像
roi = roi.copy()

# 将ROI的所有像素的蓝色通道设置为0
# 这一操作会使得提取出来的ROI图像的蓝色部分完全消失
roi[:, :, 0] = 0

# 显示修改后的原始图像(其中一个区域的蓝色通道被清除了)
cv2.imshow('images', img)

# 显示提取并修改后的ROI图像(整个ROI的蓝色通道被清除了)
cv2.imshow('roi', roi)

# 等待按键,0表示无限等待,直到用户按下任意键
cv2.waitKey(0)

# 销毁所有OpenCV创建的窗口
cv2.destroyAllWindows()

五、通道的分割与合并

在图像处理中,通道是图像数据的重要组成部分。例如,彩色图像通常由三个通道(RGB 或 BGR)组成,每个通道表示一种颜色分量。在某些场景中,我们可能需要对单个通道进 行操作,这就需要用到 OpenCV 的通道分割与通道合并功能。

5.1、分割通道

分割图像的通道指的是将原始图像的不同颜色通道提取出来,通常可以通过 csplit0 来完成。

5.2、合并通道

将分割出的通道重新合并成一个完整的图像,可以使用cv.merge()

python 复制代码
import cv2
import numpy as np

# 读取图像
img1 = cv2.imread('./images/parrot.png')


# 分离图像通道
B, G, R = cv2.split(img1)

# 创建空白图像(与原图尺寸相同)
# np.zeros_like(img1) 创建一个与 img1 形状和数据类型相同的全零数组。
blank = np.zeros_like(img1)

# 创建只包含蓝色通道的图像
# 我们将蓝色通道 (B) 与两个零通道合并,以创建一个只包含蓝色信息的图像。
blue_img = cv2.merge([B, np.zeros_like(B), np.zeros_like(B)])

# 创建只包含绿色通道的图像
# 类似地,我们创建只包含绿色通道的图像。
green_img = cv2.merge([np.zeros_like(G), G, np.zeros_like(G)])

# 创建只包含红色通道的图像
# 这是红色通道的图像。
red_img = cv2.merge([np.zeros_like(R), np.zeros_like(R), R])

# 显示原始图像
cv2.imshow('Original Image', img1)

# 显示蓝色通道图像
cv2.imshow('Blue Channel', blue_img)

# 显示绿色通道图像
cv2.imshow('Green Channel', green_img)

# 显示红色通道图像
cv2.imshow('Red Channel', red_img)

# 显示合并后的图像 (与原始图像相同)
img2 = cv2.merge([B, G, R])
cv2.imshow('Merged Image', img2)

# 等待按键
cv2.waitKey(0)

# 销毁所有OpenCV窗口
cv2.destroyAllWindows()
相关推荐
alasnot10 分钟前
BERT情感分类
人工智能·深度学习·bert
只有左边一个小酒窝16 分钟前
(九)现代循环神经网络(RNN):从注意力增强到神经架构搜索的深度学习演进
人工智能·rnn·深度学习
UQI-LIUWJ2 小时前
论文略读:REEF: Representation Encoding Fingerprints for Large Language Models
人工智能·语言模型·自然语言处理
强盛小灵通专卖员2 小时前
基于YOLOv12的电力高空作业安全检测:为电力作业“保驾护航”,告别安全隐患!
人工智能·深度学习·安全·yolo·核心期刊·计算机期刊
万米商云2 小时前
AI推荐系统演进史:从协同过滤到图神经网络与强化学习的融合
人工智能·深度学习·神经网络
cnblogs.com/qizhou/2 小时前
综述论文解读:Editing Large Language Models: Problems, Methods, and Opportunities
人工智能·语言模型·自然语言处理
UQI-LIUWJ2 小时前
论文笔记:Large Language Models for Next Point-of-Interest Recommendation
人工智能·语言模型·自然语言处理
青小莫2 小时前
如何使用deepseek满血版
人工智能
GaolBB2 小时前
博客十二:基本框架概述(上)
人工智能
强盛小灵通专卖员3 小时前
目标检测中F1-Score指标的详细解析:深度理解,避免误区
人工智能·目标检测·机器学习·视觉检测·rt-detr