当前位置: 首页 > news >正文

OpenCV结合深度学习进行图像分类

文章目录

    • 1. 支持的深度学习框架和模型格式
    • 2. 模型加载方式
      • 加载预训练模型示例:
    • 3. 图像预处理流程
    • 4. 前向传播与推理
    • 5. 结果解析与后处理
    • 6. 性能优化技巧
      • 启用GPU加速:
      • 批量处理:

代码示例在资源中有上传

1. 支持的深度学习框架和模型格式

OpenCV的DNN模块支持多种主流深度学习框架训练的模型:

  • TensorFlow: 支持冻结图(.pb)和SavedModel格式
  • Caffe: 支持.prototxt和.caffemodel文件
  • ONNX: 开放神经网络交换格式
  • Darknet: YOLO系列模型
  • Torch: PyTorch导出模型

2. 模型加载方式

加载预训练模型示例:

import cv2
import numpy as np# 方法1: 加载Caffe模型 (如CaffeNet, VGG等)
net = cv2.dnn.readNetFromCaffe('deploy.prototxt', 'model.caffemodel')# 方法2: 加载TensorFlow模型
net = cv2.dnn.readNetFromTensorflow('frozen_inference_graph.pb')# 方法3: 加载ONNX模型
net = cv2.dnn.readNetFromONNX('model.onnx')# 方法4: 加载Darknet模型 (YOLO)
net = cv2.dnn.readNetFromDarknet('yolo.cfg', 'yolo.weights')

3. 图像预处理流程

深度学习模型对输入图像有特定要求,需要进行标准化处理:

# 读取原始图像
image = cv2.imread('input_image.jpg')
(h, w) = image.shape[:2]# 创建blob对象 - OpenCV的标准化处理函数
blob = cv2.dnn.blobFromImage(image,                    # 输入图像scalefactor=1.0,         # 缩放因子 (通常为1/255.0进行归一化)size=(224, 224),         # 目标尺寸 (根据模型要求调整)mean=(104, 117, 123),    # 减去的均值 (RGB格式)swapRB=True,             # 是否交换R和B通道 (BGR转RGB)crop=False               # 是否中心裁剪
)# blob的形状为 (1, 3, 224, 224) - (batch, channels, height, width)

4. 前向传播与推理

# 设置网络输入
net.setInput(blob)# 可选:设置计算后端和目标设备
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)  # 或DNN_TARGET_CUDA# 执行前向传播获得预测结果
predictions = net.forward()
# 输出形状通常为 (1, num_classes) 或 (1, num_classes, 1, 1)

5. 结果解析与后处理

# 压缩多余维度
predictions = predictions.flatten()# 获取前N个最可能的类别
top_indices = np.argsort(predictions)[::-1][:5]  # Top-5分类结果# 加载类别标签 (如ImageNet的1000个类别)
classes = open('synset_words.txt').read().strip().split("\n")# 显示分类结果
for i, idx in enumerate(top_indices):label = classes[idx]confidence = predictions[idx]print(f"{i+1}. {label}: {confidence:.4f}")

6. 性能优化技巧

启用GPU加速:

# CUDA加速 (需要编译支持CUDA的OpenCV)
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)

批量处理:

# 处理多张图像
images = [cv2.imread(f'image_{i}.jpg') for i in range(batch_size)]
blob = cv2.dnn.blobFromImages(images, 1.0, (224, 224), (104, 117, 123))
http://www.lryc.cn/news/599935.html

相关文章:

  • 练习实践-基础设施-文件共享-windows和linux之间的文件共享-smb服务搭建
  • 解决angular与jetty websocket 每30s自动断连的问题
  • 从kHz到GHz:晶振频率范围如何决定其应用场景
  • streamyfin(世博会)android 编译
  • 告别虚函数性能焦虑:深入剖析C++多态的现代设计模式
  • 萤石云替代产品摄像头方案萤石云不支持TCP本地连接-东方仙盟
  • 蓝光中的愧疚
  • Nacos-服务注册,服务发现(一)
  • 中级统计师-经济学基础知识-第七章 失业与通货膨胀理论
  • 怎么放大单片机输出电流
  • linux C — udp,tcp通信
  • 【硬件】LT3763中文手册
  • 51 单片机单文件多文件结构工程模板的创建教程
  • Nginx 安全加固:如何阻止 IP 直接访问,只允许域名访问
  • Linux网络配置全攻略:IP、路由与双机通信
  • freqtrade关于获取k线数量,以及显示时间的问题
  • JAVA知识点(六):性能调优与线上问题排查
  • Day 3: 机器学习进阶算法与集成学习
  • 【13】C# 窗体应用WinForm——.NET Framework、WinForm、工程创建、工具箱简介、窗体属性及创建
  • [ComfyUI] -入门2- 小白零基础搭建ComfyUI图像生成环境教程
  • 语义分割-FCN-听课记录
  • vue使用xlsx库导出excel
  • 零基础-动手学深度学习-6.1 从全连接层到卷积
  • 【高等数学】第五章 定积分——第四节 反常积分
  • DuoPlus云手机再上新:统一配置品牌型号、代理分组与便捷搜索功能全面提升!
  • zabbix服务自动发现、自动注册及配置钉钉告警(小白的“升级打怪”成长之路)
  • 2025年第四届创新杯(原钉钉杯)赛题浅析-助攻快速选题
  • Keepalived 原理及配置(高可用)
  • 构建跨平台远程医疗系统中的视频通路技术方案探究
  • 关于PGCE专家技术认证解决方案