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

Python计算机视觉实战:从图像处理到目标检测

Python计算机视觉实战:从图像处理到目标检测

前言

大家好,我是第一程序员(名字大,人很菜)。作为一个非科班转码、正在学习Rust和Python的萌新,最近我开始学习计算机视觉。今天我想分享一下Python计算机视觉的实战经验,从图像处理到目标检测。

一、计算机视觉基础

1.1 计算机视觉的基本概念

  • 计算机视觉:让计算机理解和处理图像的学科
  • 图像处理:对图像进行各种操作,如滤波、变换等
  • 图像识别:识别图像中的物体或模式
  • 目标检测:检测图像中的物体并定位
  • 图像分割:将图像分割成不同的区域

1.2 计算机视觉的应用场景

  • 人脸识别:身份验证、安防监控等
  • 物体检测:自动驾驶、安防监控等
  • 图像分类:图像搜索、内容审核等
  • 医学影像:疾病诊断、医学研究等
  • 增强现实:游戏、教育等

二、环境搭建

2.1 安装必要的库

# 安装OpenCV pip install opencv-python # 安装NumPy pip install numpy # 安装Matplotlib pip install matplotlib # 安装Pillow pip install Pillow # 安装深度学习库 pip install torch torchvision

三、基础操作

3.1 图像读取与显示

使用OpenCV读取和显示图像

import cv2 import matplotlib.pyplot as plt # 读取图像 img = cv2.imread('image.jpg') # 转换颜色空间(OpenCV默认BGR,Matplotlib默认RGB) img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 显示图像 plt.imshow(img_rgb) plt.axis('off') plt.show()

3.2 图像处理

图像灰度化、模糊和边缘检测

import cv2 import matplotlib.pyplot as plt # 读取图像 img = cv2.imread('image.jpg') img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 灰度化 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 模糊处理 blurred = cv2.GaussianBlur(gray, (5, 5), 0) # 边缘检测 edges = cv2.Canny(blurred, 50, 150) # 显示结果 fig, axes = plt.subplots(1, 4, figsize=(20, 5)) axes[0].imshow(img_rgb) axes[0].set_title('Original') axes[0].axis('off') axes[1].imshow(gray, cmap='gray') axes[1].set_title('Grayscale') axes[1].axis('off') axes[2].imshow(blurred, cmap='gray') axes[2].set_title('Blurred') axes[2].axis('off') axes[3].imshow(edges, cmap='gray') axes[3].set_title('Edges') axes[3].axis('off') plt.show()

3.3 图像变换

图像缩放、旋转和翻转

import cv2 import matplotlib.pyplot as plt # 读取图像 img = cv2.imread('image.jpg') img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 缩放 resized = cv2.resize(img, (300, 200)) resized_rgb = cv2.cvtColor(resized, cv2.COLOR_BGR2RGB) # 旋转 (h, w) = img.shape[:2] center = (w // 2, h // 2) M = cv2.getRotationMatrix2D(center, 45, 1.0) rotated = cv2.warpAffine(img, M, (w, h)) rotated_rgb = cv2.cvtColor(rotated, cv2.COLOR_BGR2RGB) # 翻转 flipped = cv2.flip(img, 1) # 1表示水平翻转,0表示垂直翻转,-1表示同时翻转 flipped_rgb = cv2.cvtColor(flipped, cv2.COLOR_BGR2RGB) # 显示结果 fig, axes = plt.subplots(1, 4, figsize=(20, 5)) axes[0].imshow(img_rgb) axes[0].set_title('Original') axes[0].axis('off') axes[1].imshow(resized_rgb) axes[1].set_title('Resized') axes[1].axis('off') axes[2].imshow(rotated_rgb) axes[2].set_title('Rotated') axes[2].axis('off') axes[3].imshow(flipped_rgb) axes[3].set_title('Flipped') axes[3].axis('off') plt.show()

四、实战项目:图像分类

4.1 使用预训练模型进行图像分类

使用ResNet进行图像分类

import torch import torchvision from torchvision import transforms from PIL import Image import matplotlib.pyplot as plt # 加载预训练模型 model = torchvision.models.resnet18(pretrained=True) model.eval() # 图像预处理 transform = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载图像 img = Image.open('cat.jpg') plt.imshow(img) plt.axis('off') plt.show() # 预处理图像 img_t = transform(img) batch_t = torch.unsqueeze(img_t, 0) # 预测 with torch.no_grad(): outputs = model(batch_t) # 加载标签 with open('imagenet_classes.txt') as f: classes = [line.strip() for line in f] # 获得预测结果 _, indices = torch.sort(outputs, descending=True) percentages = torch.nn.functional.softmax(outputs, dim=1)[0] * 100 # 显示前5个预测结果 print("预测结果:") for i in indices[0][:5]: print(f"{classes[i]}: {percentages[i].item():.2f}%")

五、实战项目:目标检测

5.1 使用YOLO进行目标检测

使用YOLOv5进行目标检测

import torch import cv2 import matplotlib.pyplot as plt # 加载YOLOv5模型 model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # 加载图像 img = cv2.imread('street.jpg') img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 预测 results = model(img) # 显示结果 results.print() # 打印预测结果 results.show() # 显示带检测框的图像 # 保存结果 results.save()

六、实战项目:人脸识别

6.1 使用OpenCV进行人脸识别

使用Haar级联分类器进行人脸识别

import cv2 import matplotlib.pyplot as plt # 加载人脸识别模型 face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') # 加载图像 img = cv2.imread('people.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 检测人脸 faces = face_cascade.detectMultiScale(gray, 1.3, 5) # 绘制检测框 for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) # 显示结果 img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img_rgb) plt.axis('off') plt.show()

七、计算机视觉的挑战与解决方案

7.1 常见挑战

  • 光照变化:不同光照条件下的图像差异很大
  • 视角变化:同一物体从不同角度拍摄的图像差异很大
  • 遮挡:物体被部分遮挡时难以识别
  • 尺度变化:同一物体在不同距离拍摄的图像大小不同
  • 背景复杂:复杂背景会干扰物体检测

7.2 解决方案

  • 数据增强:通过各种变换增加训练数据
  • 多尺度检测:在不同尺度下检测物体
  • 鲁棒特征:使用对光照、视角等变化不敏感的特征
  • 深度学习:使用深度学习模型自动学习特征
  • 集成方法:结合多个模型的预测结果

八、从Rust开发者角度的思考

8.1 性能优化

  • 图像处理:使用Rust实现高性能的图像处理
  • 模型推理:使用Rust优化模型推理过程
  • 内存管理:Rust的内存管理可以减少内存泄漏

8.2 跨语言集成

  • 使用PyO3:将Rust代码集成到Python中
  • 使用WebAssembly:将Rust实现的计算机视觉功能编译为WebAssembly
  • 使用gRPC:在Rust和Python之间建立通信

九、总结

Python计算机视觉实战是一个从基础到应用的过程,需要掌握图像处理、图像识别、目标检测等技能。作为一个非科班转码者,我认为通过系统学习和实践,完全可以掌握计算机视觉技术。

虽然计算机视觉的学习曲线比较陡峭,但通过项目实践和不断积累经验,你会逐渐掌握其精髓。同时,结合Rust的性能优势,可以进一步优化计算机视觉应用的性能。

保持学习,保持输出。虽然现在我还是个菜鸡,但我相信只要坚持,总有一天能成为真正的「第一程序员」!

http://www.jsqmd.com/news/562571/

相关文章:

  • Xstream历史漏洞审计
  • StarRailAssistant:崩坏星穹铁道自动化终极解决方案,如何用开源脚本解放双手?
  • thermalmonitordDisabler:突破iOS性能枷锁的终极方案——彻底解决过热降频问题指南
  • Faur嵌入式游戏框架:轻量C状态机驱动跨平台2D开发
  • 年度定方向,季度做取舍,月度校偏差,周度抓闭环
  • Jimeng LoRA企业落地案例:设计公司LoRA训练-测试-选型一体化流程
  • STM32 AFIO时钟开启时机与复用功能解析
  • 嵌入式系统协议兼容性设计与Protobuf实践
  • RT-Thread死锁排查指南:从症状定位到修复的完整流程(附常见错误案例)
  • 别再对着blob:链接发愁了!用浏览器开发者工具+ffmpeg,5分钟搞定网页视频下载
  • LPC1768裸机LED二进制计数器实现
  • 【刚性 PINN 与时间自适应策略】第三章:时间自适应配点技术
  • 深入剖析PHP 7.4.21开发服务器源码泄露漏洞及其复现过程
  • Mojo调用Python生态的7种方式,第4种连PyTorch官方文档都没写!——混合编程兼容性白皮书首发
  • 西门子1200水处理程序全解析
  • 二进制补丁技术革新:bsdiff/bspatch如何重塑软件更新生态
  • 如何优雅绕过付费墙:Bypass Paywalls Clean技术解析
  • Unsloth实战:DeepSeek-R1模型高效微调完整步骤解析
  • T-S推理在智能控制系统中的实战解析与MATLAB实现
  • 饭教程!在 Linux 环境下快速完成安装、初始化与 Web UI 配置
  • 人工智能|大模型——应用——降低OpenClaw Token成本的四大策略
  • 基于MATLAB的单机无穷大系统的暂态稳定性系统设计 本设计包括设计报告,仿真工程
  • 英雄联盟段位修改终极指南:轻松打造个性化游戏界面
  • Asian Beauty Z-Image Turbo 效果对比:不同采样器与步数下的图像质量分析
  • 如何快速上手TegraRcmGUI:Switch破解注入完整指南
  • 脑电信号分类避坑指南:为什么你的CNN模型准确率上不去?
  • RDA5807M FM收音芯片驱动开发与硬件接口设计
  • 如何通过辅助排序损失优化推荐模型在稀疏反馈场景下的性能(KDD‘2024)
  • 解锁LoRa远距离通信:Heltec ESP32 LoRa v3的高效实战指南
  • 佳贝思锂电池专用上位机软件|兼容博强BMS保护板(适配圣阳、双登、汇龙、拓邦、海四达等品牌电池)