cv.dnn.blobFromImage参数详解
例如:
image = cv.imread('imgs/img.png') blob = cv.dnn.blobFromImage(image, scalefactor=1.0, size=(224, 224), mean=(0, 0, 0), swapRB=True, crop=False) print("原始图像形状:", image.shape) print("Blob数据形状:", blob.shape)
1. image
- 含义:这是输入的原始图像数据,通常是通过
cv.imread
等函数读取的图像。图像可以是灰度图(单通道,数据类型通常为uint8
)或彩色图(常见的 RGB 三通道图像,数据类型也为uint8
)。
import cv2 as cv
# 读取一张彩色图像
image = cv.imread('your_image.jpg')
2. scalefactor
- 含义:这个参数用于对图像数据进行缩放。它是一个浮点数,将原始图像的每个像素值乘以这个
scalefactor
。例如,如果scalefactor = 1.0
,则图像像素值保持不变;如果scalefactor = 0.5
,则图像每个像素值都变为原来的一半。这个参数在将图像数据归一化到特定范围时很有用,比如在一些网络中需要将像素值范围从[0, 255]
调整到[0, 1]
或其他范围时,可以通过设置合适的scalefactor
来实现。
# 将图像像素值缩小为原来的0.5倍
blob = cv.dnn.blobFromImage(image, scalefactor=0.5, size=(224, 224), mean=(0, 0, 0), swapRB=True, crop=False)
也可以这样
cv.dnn.blobFromImage(bgr, 1 / 255.0, (640, 640), swapRB=True,crop=False)
3. size
- 含义:它是一个元组
(height, width)
,指定了转换后图像的大小。原始图像会被调整(通常是通过缩放和裁剪等操作)到这个指定的尺寸。这个尺寸是根据深度学习网络输入层的要求来确定的,不同的网络模型可能需要不同的输入图像大小,因此需要根据实际使用的网络来设置size
参数。
# 将图像转换为224x224大小的图像
blob = cv.dnn.blobFromImage(image, scalefactor=1.0, size=(224, 224), mean=(0, 0, 0), swapRB=True, crop=False)
4. mean
- 含义:
mean
是一个元组(meanB, meanG, meanR)
,用于对图像进行去均值操作。在深度学习中,为了提高模型的稳定性和泛化能力,通常会对图像进行去均值处理。这个操作是在每个通道上分别进行的,即从图像的蓝色通道(B)、绿色通道(G)和红色通道(R)的每个像素值中分别减去对应的mean
值。例如,如果mean=(128, 128, 128)
,则会从蓝色通道的每个像素值中减去 128,从绿色通道的每个像素值中减去 128,从红色通道的每个像素值中减去 128。
# 对图像进行去均值操作,每个通道减去均值127
blob = cv.dnn.blobFromImage(image, scalefactor=1.0, size=(224, 224), mean=(127, 127, 127), swapRB=True, crop=False)
4. swapRB
- 含义:这是一个布尔值参数,用于交换图像的红色(R)和蓝色(B)通道。在 OpenCV 中,图像的存储顺序通常是 BGR,而在一些深度学习模型中,可能需要 RGB 顺序的图像数据。如果
swapRB=True
,则在转换图像时会将 BGR 顺序转换为 RGB 顺序;如果swapRB=False
,则保持图像的 BGR 顺序不变。
# 交换图像的R和B通道
blob = cv.dnn.blobFromImage(image, scalefactor=1.0, size=(224, 224), mean=(0, 0, 0), swapRB=True, crop=False)
5. crop
- 含义:这也是一个布尔值参数,用于确定是否对图像进行裁剪。如果
crop=True
,在调整图像大小时,会根据指定的size
对图像进行裁剪,以获取精确尺寸的图像;如果crop=False
,则会通过缩放图像来尽量匹配指定的size
,可能不会得到精确尺寸的图像,但会保留原始图像的完整内容,只是尺寸可能会有所不同。
# 不对图像进行裁剪,只进行缩放
blob = cv.dnn.blobFromImage(image, scalefactor=1.0, size=(224, 224), mean=(0, 0, 0), swapRB=True, crop=False)