OpenCV 动手指南:图像处理基础到计算机视觉实战

OpenCV 安装与配置

在 Python 环境中安装 OpenCV 使用以下命令:

pip install opencv-python

如果需要额外的模块(如 contrib 包),可以安装:

pip install opencv-contrib-python

验证安装是否成功:

import cv2
print(cv2.__version__)

图像读取与显示

使用 cv2.imread() 读取图像文件,支持格式包括 JPEG、PNG、TIFF 等。示例代码:

import cv2
image = cv2.imread('example.jpg', cv2.IMREAD_COLOR)
cv2.imshow('Image Window', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

参数 cv2.IMREAD_COLOR 表示以 BGR 格式加载彩色图像,其他常用参数包括:

  • cv2.IMREAD_GRAYSCALE:灰度模式
  • cv2.IMREAD_UNCHANGED:保留 Alpha 通道

图像基本操作

颜色空间转换
BGR 转灰度:

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

BGR 转 HSV:

hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

图像缩放
使用 cv2.resize() 调整尺寸:

resized = cv2.resize(image, (width, height), interpolation=cv2.INTER_LINEAR)

插值方法包括:

  • cv2.INTER_NEAREST:最近邻
  • cv2.INTER_CUBIC:三次样条

图像滤波与增强

高斯模糊
平滑图像以减少噪声:

blurred = cv2.GaussianBlur(image, (5, 5), 0)

参数 (5, 5) 是核大小,0 表示自动计算标准差。

边缘检测
Canny 边缘检测:

edges = cv2.Canny(image, threshold1=50, threshold2=150)

阈值范围影响边缘的敏感度。

特征检测与匹配

关键点检测
使用 SIFT 算法(需 OpenCV contrib):

sift = cv2.SIFT_create()
keypoints, descriptors = sift.detectAndCompute(gray_image, None)

特征匹配
暴力匹配器示例:

bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True)
matches = bf.match(descriptors1, descriptors2)
matched_image = cv2.drawMatches(img1, kp1, img2, kp2, matches, None)

目标检测实战

Haar 级联分类器
人脸检测示例:

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5)
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)

YOLO 模型
加载预训练模型进行实时检测:

net = cv2.dnn.readNet('yolov3.weights', 'yolov3.cfg')
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

视频处理

读取视频流
从摄像头捕获:

cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    cv2.imshow('Frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()

保存视频
设置编解码器并写入帧:

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
out.write(frame)
out.release()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值