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

OpenCV快速入门

1. 安装OpenCV

Python用户使用以下命令安装:

pip install opencv-python  # 基础模块
pip install opencv-contrib-python  # 包含额外模块(如SIFT)

2. 图像基础操作

读取/显示/保存图像
import cv2

# 读取图像(第二个参数:cv2.IMREAD_COLOR / GRAYSCALE / UNCHANGED)
img = cv2.imread('image.jpg', cv2.IMREAD_COLOR)

# 显示图像
cv2.imshow('Window Title', img)
cv2.waitKey(0)  # 等待按键(0表示无限等待)
cv2.destroyAllWindows()

# 保存图像
cv2.imwrite('output.jpg', img)
转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
调整尺寸和裁剪
resized = cv2.resize(img, (new_width, new_height))
cropped = img[y1:y2, x1:x2]  # 高度范围在前,宽度在后

3. 视频处理

从摄像头捕获视频
cap = cv2.VideoCapture(0)  # 0表示默认摄像头

while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    # 在此处理帧(例如转换为灰度)
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    cv2.imshow('Camera', gray_frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):  # 按q退出
        break

cap.release()
cv2.destroyAllWindows()
处理视频文件
cap = cv2.VideoCapture('video.mp4')
while cap.isOpened():
    ret, frame = cap.read()
    # ...(同上)

4. 物体检测(以人脸检测为例)

# 加载预训练的Haar级联分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 检测人脸
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)

# 绘制矩形框
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow('Faces', img)
cv2.waitKey(0)

5. 图像处理进阶

边缘检测(Canny)
edges = cv2.Canny(img, threshold1=100, threshold2=200)
轮廓检测
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0,255,0), 2)
图像变换(旋转/平移)
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 1)  # 旋转45度
rotated = cv2.warpAffine(img, M, (cols, rows))

6. 学习资源

  • 官方文档: https://docs.opencv.org

  • GitHub示例: OpenCV官方仓库的samples文件夹

  • 实用工具:

    • cv2.VideoWriter() 保存视频

    • cv2.filter2D() 图像滤波

    • cv2.HoughLinesP() 霍夫变换检测直线

http://www.dtcms.com/a/112502.html

相关文章:

  • 【python脚本】基于pyautogui的python脚本
  • MySQL 面试知识点详解(索引、存储引擎、事务与隔离级别、MVCC、锁机制、优化)
  • Pascal语言的贪心算法
  • Ruby语言的代码重构
  • 康托展开原理
  • 获取ssh密钥
  • vscode c语言环境配置
  • 【MySQL】navicat16 result字段识别不了
  • LC416 vector<bool> 和 bool[] 的异同
  • 【BUG】生产环境死锁问题定位排查解决全过程
  • Pascal语言的系统监控
  • 深入解析ARM与RISC-V架构的Bring-up核心流程
  • 日常真实工作环境,Mysql常用操作命令,笔记!
  • (回滚莫队)洛谷 P10268 符卡对决 题解
  • 解锁 DeepSeek 与 Matlab:攻克科研难题的技术利刃
  • UE5 Simulation Stage
  • 第二十一节课:Python程序循环结构详解
  • 玩转JSONObject:使用方法详解与Map对比
  • 您使用的开源软件许可证是否存在冲突呢?
  • AI Agent 工作流程解析:从原理到实践
  • go day 01
  • Nyquist插件基础:LISP语法-数据类型
  • 【每日算法】Day 17-1:位图(Bitmap)——十亿级数据去重与快速检索的终极方案(C++实现)
  • Java枚举如何实现自增赋值呢?
  • 第一讲—函数的极限与连续(一)
  • TiDB 数据库8.1版本编译及部署
  • 网络编程—Socket套接字(TCP)
  • 从零实现APP实时聊天功能:WebSocket+离线消息+多媒体传输全解析
  • deepseek v3-0324实现SVG 编辑器
  • 345-java人事档案管理系统的设计与实现