cv2.dnn.blobFromImages
时间: 2023-07-24 18:53:01 浏览: 107
cv2.dnn.blobFromImages 是 OpenCV 中一个用于构建输入图像的辅助函数,通常用于深度学习模型推理。该函数可以将一组输入图像转换为一个 4 维张量(batch_size, channels, height, width),并进行标准化和可选的裁剪、大小调整等操作。它的主要参数包括输入图像列表、缩放因子、目标大小、均值和标准差等。使用该函数可以方便地将多张图像输入到深度学习模型中进行推理。
相关问题
cv2.dnn.blobFromImages具体用法
`cv2.dnn.blobFromImages` 是 OpenCV 中用于将一组输入图像转换为一个 blob 的函数。它的具体用法如下:
```python
cv2.dnn.blobFromImages(images, scalefactor=None, size=None, mean=None, swapRB=True, crop=False, ddepth=None)
```
其中,参数含义如下:
- `images`:输入图像组成的列表或数组;
- `scalefactor`:缩放因子,将输入图像进行缩放处理,可以设置为 1.0 或其它小于 1.0 的数值;
- `size`:输出 blob 的尺寸,格式为 (width, height),如果不指定则默认为输入图像的尺寸;
- `mean`:各个通道的均值,用于对输入数据进行归一化处理;
- `swapRB`:是否对输入数据的通道进行颜色交换,即将 (B, G, R) 顺序转换为 (R, G, B),默认为 True;
- `crop`:是否对输入图像进行裁剪,即将图像的中心部分截取出来进行处理;
- `ddepth`:输出 blob 的深度,如果不指定则默认为 CV_32F。
`cv2.dnn.blobFromImages` 函数会将输入图像组成一个 blob,返回一个 NCHW 格式的数组,其中 N 表示输入图像的数量,C 表示通道数,H 和 W 分别表示输出 blob 的高度和宽度。具体用法可以参考下面的示例代码:
```python
import cv2
# 读取输入图像
img1 = cv2.imread("image1.jpg")
img2 = cv2.imread("image2.jpg")
images = [img1, img2]
# 将输入图像转换为 blob
blob = cv2.dnn.blobFromImages(images, scalefactor=1/255.0, size=(224, 224), mean=(0, 0, 0), swapRB=False)
# 输出 blob 的形状
print(blob.shape)
```
在上面的示例代码中,我们将两张输入图像转换为一个 blob,并打印了 blob 的形状。注意,在调用 `cv2.dnn.blobFromImages` 函数时,我们将 `scalefactor` 设置为 1/255.0,这是为了将输入图像的像素值归一化到 [0, 1] 的范围内。同时,我们将 `size` 设置为 (224, 224),这是因为在使用一些预训练的深度学习模型时,输入图像的尺寸需要满足一定的要求。
对于多个图像组成的数据集使用OpenCV中的cv2.dnn.blobFromImages()进行分类模型的预处理,数据集在附件文件夹名为images1中。分类模型、配置文件、类标签集文件在附件中。调用分类模型和配置文件使用函数名为cv2.dnn.readNetFromCaffe()。A.导入必要的包 B.使用open打开类标签集文件 C.使用cv2.dnn.readNetFromCaffe()函数装载分类模型和配置文件 D.使用paths获取输入图像路径 E.使用cv2.imread()函数读图像路径中的每个图像 F.使用cv2.resize()函数调整图像集中的每个图像的大小 G.把图像集中的每个图像放到一个图像集列表中 H.使用cv2.dnn.blobFromImages()函数预处理图像集 I.把cv2.dnn.blobFromImages()的返回结果导入分类模型中并把预测结果降 序排列 J.画最高预测概率的类标签到图像的左上角,并且显示图像分类名称和概率值
A. 导入必要的包:cv2, numpy, argparse
```
import cv2
import numpy as np
import argparse
```
B. 使用 open 打开类标签集文件
```
with open('labels.txt') as f:
labels = f.read().strip().split('\n')
```
C. 使用 cv2.dnn.readNetFromCaffe() 函数装载分类模型和配置文件
```
model = cv2.dnn.readNetFromCaffe('deploy.prototxt', 'model.caffemodel')
```
D. 使用 paths 获取输入图像路径
```
image_paths = sorted(list(paths.list_images('images1')))
```
E. 使用 cv2.imread() 函数读图像路径中的每个图像
```
images = []
for image_path in image_paths:
image = cv2.imread(image_path)
images.append(image)
```
F. 使用 cv2.resize() 函数调整图像集中的每个图像的大小
```
resized_images = []
for image in images:
resized_image = cv2.resize(image, (227, 227))
resized_images.append(resized_image)
```
G. 把图像集中的每个图像放到一个图像集列表中
```
image_list = np.array(resized_images)
```
H. 使用 cv2.dnn.blobFromImages() 函数预处理图像集
```
blob = cv2.dnn.blobFromImages(image_list, 1.0, (227, 227), (104, 117, 123))
```
I. 把 cv2.dnn.blobFromImages() 的返回结果导入分类模型中并把预测结果降序排列
```
model.setInput(blob)
outputs = model.forward()
predictions = outputs[0]
sorted_predictions = np.argsort(predictions)[::-1]
```
J. 画最高预测概率的类标签到图像的左上角,并且显示图像分类名称和概率值
```
for i in range(len(images)):
image = images[i]
prediction = predictions[i]
label = labels[sorted_predictions[i]]
confidence = prediction[sorted_predictions[i]]
text = f'{label}: {confidence:.2f}'
cv2.putText(image, text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
cv2.imshow('Image', image)
cv2.waitKey(0)
```
阅读全文