摘要:色彩空间中图像的每个像素用一个三元组表示三元组中的个值依次表示红色绿色和蓝色依次对应和通道。默认采用色彩空间它按和通道顺序表示图像。读取图像显示图像转换色彩空间为显示图像几何变换缩放的函数用于缩放图像其基本格式如下。
/qquad 色彩空间也称颜色模型、颜色空间、色彩模型等,它是图像在计算机内部的一种存储方式。常见的色彩空间包括 RGB、GRAY、XYZ、YCrCb、HSV 等。色彩空间在物体追踪、特征检测等(简单来说就是识别一个东西)扮演着很重要的角色。毕竟每个物体都有特定的颜色和特征,我们可以应用其物体与环境颜色上的差异,从图像中提取特定范围的颜色并加上一些逻辑性的判断,获取待检测物体的位置。每种色彩空间都有其擅长的问题解决领域,所以在解决具体色彩问题时往往需要进行色彩空间类型转换。
OpenCV 的 cv2.cvtColor()函数用于转换色彩空间类型,其基本格式如下。
dst = cv2.cvtcolor(src,code[,dstcn]])
其参数说明如下:
参数 | 说明 |
---|---|
dst | 表示转换后的图像 |
src | 表示转换前的原图像 |
code | 表示色彩空间类型转换码 |
dstCn | 表示目标图像的通道数 |
常见的色彩空间类型转换码如下:
参数 | 说明 |
---|---|
cv2.COLOR_BGR2RGB | 将BGR 色彩空间转换为 RGB 色彩空间 |
cv2.COLOR_BGR2GRAY | 将 BGR 色彩空间转换为 GRAY 色彩空间 |
cv2.COLOR_BGR2HSV | 将 BGR 色彩空间转换为 HSV 色彩空间 |
cv2.COLOR_BGR2YCrCb | 将 BGR 色彩空间转换为 YCrCb 色彩空间 |
cv2.COLOR_RGB2BGR | 将 RGB 色彩空间转换为 BGR 色彩空间 |
cv2.COLOR_RGB2GRAY | 将 RGB 色彩空间转换为 GRAY 色彩空间 |
c2.COLOR_RGB2YCrCb | 将 RGB 色彩空间转换为 YCrCb 色彩空间 |
cv2.COLOR_RGB2HSV | 将RGB 色彩空间转换为 HSV 色彩空间 |
/qquad RGB 色彩空间使用R(Red,红)、G(Green,绿)和B(Blue,蓝)3种基本颜色表示图像像素。RGB 色彩空间中,图像的每个像素用一个三元组表示,三元组中的3个值依次表示红色、绿色和蓝色,依次对应 R、G和B通道。OpenCV默认采用 BGR 色彩空间,它按 B、G和R通道顺序表示图像。
在cv2.cvtColor()函数中使用cv2.COLOR_BGR2RGB转换码可将图像从BGR色彩空间转换RGB色彩空间。
import cv2img = cv2.imread('bee.jpg') # 读取图像cv2.imshow('bee', img) # 显示图像img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 转换色彩空间为RGBcv2.imshow('RGB', img2) # 显示图像cv2.waitKey(0)
/qquad GRAY 色彩空间通常指 8 位灰度图像,其颜色取值范围为[0,255],共 256个灰度级。从 RGB 色彩空间转换为 GRAY 色彩空间的计算公式如下。
G r a y = 0.299 R + 0.587 G + 0.114 B Gray =0.299R+0.587G+0.114B Gray=0.299R+0.587G+0.114B
其中,R、G和 B为 RGB 色彩空间中 R、G 和 B 通道的图像。在 cv2.cvtColor()函数中使用 cv2.COLOR_BGR2GRAY 转换码可将图像从BGR 色彩空间转换为 GRAY 色彩空间。
import cv2img = cv2.imread('bee.jpg') # 读取图像cv2.imshow('bee', img) # 显示图像img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换色彩空间为GRAYcv2.imshow('GRAY', img2) # 显示图像cv2.waitKey(0)
/qquad YCrCb 色彩空间用亮度 Y、红色 Cr 和蓝色 Cb 表示图像。从 RGB 色彩空间转换为 YCrCb 色彩空间的计算公式如下。
Y = 0.299 R + 0.587 G + 0.114 B C r = 0.713 ( R − Y ) + d e l t a C b = 0.564 ( B − Y ) + d e l t a Y=0.299R+ 0.587G+ 0.114B// Cr= 0.713(R- Y)+ delta// Cb= 0.564(B- Y)+ delta// Y=0.299R+0.587G+0.114BCr=0.713(R−Y)+deltaCb=0.564(B−Y)+delta
其中
d e l t a = { 128 8 位 图 像 32767 16 位 图 像 0.5 单 精 度 图 像 delta= /begin{cases} 128 & 8位图像// 32767 & 16位图像 // 0.5 & 单精度图像 // /end{cases} delta=⎩⎪⎨⎪⎧128327670.58位图像16位图像单精度图像
在cv2.cvtColor()函数中使用 cv2.COLOR_BGR2YCrCb 转换码可将图像从 BGR 色彩空间转换为 YCrCb 色彩空间。
import cv2img = cv2.imread('bee.jpg') # 读取图像cv2.imshow('bee', img) # 显示图像img2 = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb) # 转换色彩空间为YCrCbcv2.imshow('YCrCb', img2) # 显示图像cv2.waitKey(0)
/qquad HSV 色彩空间使用色调(Hue,也称色相)、饱和度(Saturation)和亮度(Value)表示图像。
色调 H表示颜色,用角度表示,取值范围为[0°,360°],从红色开始按逆时针方向计算。例如,红色为 0°、黄色为 60°、绿色为 120°、青色为 180°、蓝色为 240°、紫色为 300°等。饱和度 S 表示颜色接近光谱色的程度,或者表示光谱色中混入白光的比例。光谱色中白光的比例越低,饱和度越高,颜色越深、艳。光谱色中白光比例为 0 时,饱和度达到最高。饱和度的取值范围为[0,1]。亮度V表示颜色明亮的程度,是人眼可感受到的明暗程度,其取值范围为[0,1]。
从 RGB 色彩空间转换为 HSV 色彩空间的计算公式如下:
V = m a x ( R , G , B ) V = max(R,G,B) V=max(R,G,B)
S = { V − m i n ( R , G , B ) V V ≠ 0 0 V = 0 S= /begin{cases} /frac{V-min(R,G,B)}{V} & V/neq0// 0 & V=0 // /end{cases} S={VV−min(R,G,B)0V=0V=0
H = { 60 − ( G − B ) V − m i n ( R , G , B ) V = R 120 + 60 − ( B − R ) V − m i n ( R , G , B ) V = G 240 + 60 − ( R − G ) V − m i n ( R , G , B ) V = B H= /begin{cases} /frac{60-(G-B)}{V-min(R,G,B)} & V=R// 120+/frac{60-(B-R)}{V-min(R,G,B)} & V=G // 240+/frac{60-(R-G)}{V-min(R,G,B)} & V=B // /end{cases} H=⎩⎪⎨⎪⎧V−min(R,G,B)60−(G−B)120+V−min(R,G,B)60−(B−R)240+V−min(R,G,B)60−(R−G)V=RV=GV=B
计算结果中如果H<0,则令H= H+360.
在cv2.cvtColor()函数中使用 cv2.COLOR_BGR2HSV转换码可将图像从 BGR 色彩空间转换为 HSV 色彩空间。
import cv2img = cv2.imread('bee.jpg') # 读取图像cv2.imshow('BGR', img) # 显示图像img2 = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 转换色彩空间为HSVcv2.imshow('HSV', img2) # 显示图像cv2.waitKey(0)
OpenCV的cv2.resize()函数用于缩放图像,其基本格式如下。
dst=cv2.resize(src,dsize[,dst[,fx[,fy[,interpolation]]]])
其参数说明如下:
参数 | 说明 |
---|---|
dst | 表示转换后的图像 |
src | 表示用于缩放的原图像 |
dsize | 表示转换后的图像大小 |
fx | 表示水平方向的缩放比例 |
fy | 表示垂直方向的缩放比例 |
interpolation | 表示插值方式。在转换过程中,可能存在一些不能通过转换算法确定值的像素,插值方式决定了如何获得这些像素的值。可用的插值方式如下表 |
参数 | 说明 |
---|---|
cv2.INTER_NEAREST | 最近邻插值 |
cv2.INTER_LINEAR | 双线性插值,默认方式 |
cv2.INTER_CUBIC | 3 次样条插值 |
cv2.INTER_AREA | 区域插值 |
cv2.INTER_LANCZOS4 | Lanczos 插值 |
cv2.INTER_LINEAR_EXACT | 位精确双线性插值 |
cv2.INTER_MAX | 插值编码掩码 |
cv2.WARP_FILL_OUTLIERS | 标志,填充目标图像中的所有像素 |
cv2.WARP_INVERSE_MAP | 标志,逆变换 |
cv2.resize()函数在转换图像时,目标图像的类型和大小与转换之前 dst表示的图像无关。目标图像的类型与 src 表示的原图像一致,其大小可通过参数dsize、fx和 fy 来确定。当dsize 参数不为 None时,不管是否设置参数fx和fy,都由dsize 来确定目标图像的大小。dsize是一个二元组,其格式为“(width,height)”,width 表示目标图像的宽度,height表示目标图像的高度。当dsize 参数为 None时,参数fx和fy不能设置为 0。此时,目标图像的宽度为“round(原图像的宽度×fx)”,目标图像的高度为“round(原图像的高度×fy)”。
import cv2img = cv2.imread('bee.jpg') # 读取图像sc = [1, 0.2, 0.5, 1.5, 2] # 设置缩放比例cv2.imshow('showimg', img) # 显示图像while True: key = cv2.waitKey() if 48 <= key <= 52: # 按键【0】、【1】、【2】、【3】或【4】 x = y = sc[key-48] # 获得缩放比例 img2 = cv2.resize(img, None, fx=x, fy=y) # 缩放图像 cv2.imshow('showimg', img2) # 显示图像
OpenCV 的 cv2.flip()函数用于翻转图像,其基本格式如下。
dst=cv2.flip(src,flipCode)
其参数说明如下:
参数 | 说明 |
---|---|
dst | 表示转换后的图像 |
src | 表示原图像 |
fipCode | 表示翻转类型。flip 为 0 时绕 X轴翻转(垂直翻转),fip 为大于 0 的整数时绕y轴翻转(水平翻转),flip 为小于 0 的整数时同时绕 ×轴和 y轴翻转(水平和垂直翻转) |
import cv2img = cv2.imread('bee.jpg') # 读取图像cv2.imshow('showimg', img) # 显示图像while True: key = cv2.waitKey() if key == 48: # 按【0】键时显示原图 img2 = img elif key == 49: # 按【1】键时垂直翻转 img2 = cv2.flip(img, 0) elif key == 50: # 按【2】键时水平翻转 img2 = cv2.flip(img, 1) elif key == 51: # 按【3】键时水平、垂直翻转 img2 = cv2.flip(img, -1) cv2.imshow('showimg', img2)
/qquad 仿射变换包含了平移、旋转、缩放等操作,其主要特点是:原图像中的所有平行线在转换后的图像中仍然平行。OpenCV 的 cv2.warpAfine()函数用于实现图像的仿射变换,其基本格式如下。
dst=cv2.warpAffine(src,M,dsize[,dst[,flags[,bonderMode[, borderValue]]]])
其参数说明如下:
参数 | 说明 |
---|---|
dst | 表示转换后的图像,图像类型和原图像一致,大小由 dsize 决定 |
src | 表示原图像 |
M | 是一个大小为 2×3的转换矩阵,使用不同的转换矩阵可实现平移、旋转等多种操作 |
dsize | 为转换后的图像大小 |
flags | 为插值方式,默认值为 cV2.INTER_LINEAR |
borderMode | 为边类型,默认值为 cv2.BORDER_CONSTANT |
borderValue | 为边界值,默认为 0 |
在 cv2.warpAffine()函数省略可选参数时,图像转换的矩阵运算公式如下:
d s t ( x , y ) = s r c ( M 11 x + M 12 y + M
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/121983.html
摘要:在一文了解中,我们了解到采用的是可编程渲染管线。新的顶点位置通过在顶点着色器中写入传递到渲染管线的后继阶段继续处理。顶点着色器中可以计算一个点的大小单位为像素,并将其赋值给类型以传递给渲染管线,如果没有明确赋值的话,默认值为。OpenGL ES 构建的三维空间,其中的三维实体由许多的三角形拼接构成。如下图左侧所示的三维实体圆锥,其由许多三角形按照一定规律拼接构成。而组成圆锥的每一个三角形,其...
摘要:从零开始学习课图像的几何变换本系列面向小白,从零开始实战解说项目实战。仿射变换仿射变换的特点是原始图像中的平行关系和线段长度比例关系保持不变。函数说明函数通过变换矩阵对图像进行仿射变换。 ...
摘要:如果不设置这个,图片只会一瞬间显示,就消失了。括号里面也可以设置显示时长。 目录 1、概述 2、OpenCV基础 读取图片 imread 调整显示窗口大小 resizeWindow 调整图像尺寸大小 resize 色彩空间进行转换 cvtColor 绘制线段 line 绘制矩形框 recta...
阅读 426·2023-04-25 19:43
阅读 3621·2021-11-30 14:52
阅读 3414·2021-11-30 14:52
阅读 3347·2021-11-30 14:49
阅读 3275·2021-11-30 14:49
阅读 3520·2021-11-29 11:00
阅读 3487·2021-11-29 11:00
阅读 3518·2021-11-29 11:00