🎯 目标方向:"小辉懂编程正在向全力迈进!
🆔 版权声明:原创文章,如需转载请告知作者。
📅 创作时间:2025 年 12 月 17 日
📂 个人主页:小辉懂编程-CSDN博客
📌 专栏系列:python - open CV 专栏
💬 互动交流:欢迎点赞👍|收藏⭐|留言📝,一起交流技术,共同进步!
🌟 公众平台:文章底部公众号(小辉快乐编程)可以获取学习资料,共同进步
🌟 个人格言:"代码改变世界,逻辑塑造未来!"
openCV 基础概念
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,支持跨平台开发,涵盖图像处理、视频分析、机器学习等功能。核心模块包括:
- imgproc:图像处理(滤波、边缘检测等)
- highgui:图像显示与交互
- core:基础数据结构(如矩阵操作)
- video:视频分析与运动跟踪
1.安装与环境配置
Python 环境下通过 pip 安装:
pip install opencv-python # 基础模块 pip install opencv-contrib-python # 包含扩展模块OpenCV主要函数
| 函数名 | 主要作用 | 常见应用场景 |
|---|---|---|
| cv2.imread() | 读取图像文件 | 从文件路径加载图像数据到内存 |
| cv2.imshow() | 显示图像窗口 | 在窗口中展示图像内容 |
| cv2.imwrite() | 保存图像文件 | 将处理后的图像写入到磁盘文件 |
| cv2.cvtColor() | 颜色空间转换 | 如RGB转灰度图、RGB转HSV |
| cv2.resize() | 调整图像尺寸 | 缩放图像到指定大小 |
| cv2.GaussianBlur() | 高斯模糊 | 图像降噪、平滑处理 |
| cv2.Canny() | Canny边缘检测 | 提取图像中的边缘信息 |
| cv2.findContours() | 查找轮廓 | 在二值图像中检测物体轮廓 |
| cv2.threshold() | 阈值处理 | 图像二值化(全局阈值) |
| cv2.adaptiveThreshold() | 自适应阈值处理 | 图像二值化(局部阈值) |
| cv2.HoughLines() | 霍夫直线变换 | 检测图像中的直线 |
| cv2.HoughCircles() | 霍夫圆变换 | 检测图像中的圆形 |
| cv2.matchTemplate() | 模板匹配 | 在图像中搜索特定模板的位置 |
| cv2.VideoCapture() | 视频捕获对象 | 读取摄像头或视频文件 |
| cv2.VideoWriter() | 视频写入对象 | 保存视频帧为视频文件 |
| cv2.erode() | 腐蚀操作 | 形态学处理,减小前景区域 |
| cv2.dilate() | 膨胀操作 | 形态学处理,增大前景区域 |
| cv2.morphologyEx() | 形态学操作 | 开运算、闭运算、形态学梯度等 |
| cv2.calibrateCamera() | 相机标定 | 计算相机内参和畸变系数 |
| cv2.undistort() | 图像校正 | 去除镜头畸变 |
图像读取与显示
import cv2 # 读取图像(参数:文件路径,标志如 cv2.IMREAD_COLOR) image = cv2.imread('image.jpg') # 显示图像(窗口名称,图像数据) cv2.imshow('Display', image) cv2.waitKey(0) # 等待按键关闭窗口 cv2.destroyAllWindows()2.图像基本操作
颜色空间转换:
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 转为灰度图 hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # 转为HSV空间绘制图形:
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2) # 画矩形 cv2.putText(image, 'Text', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)3.图像处理技术
边缘检测(Canny):
edges = cv2.Canny(gray, threshold1=50, threshold2=150)阈值处理:
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)滤波(高斯模糊):
blurred = cv2.GaussianBlur(image, (5, 5), 0)视频处理
读取摄像头或视频文件:
cap = cv2.VideoCapture(0) # 0 为默认摄像头 while True: ret, frame = cap.read() if not ret: break cv2.imshow('Video', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release()4.特征检测与匹配
SIFT 特征点检测:
sift = cv2.SIFT_create() keypoints, descriptors = sift.detectAndCompute(gray, None) image_with_keypoints = cv2.drawKeypoints(image, keypoints, None)ORB 快速匹配:
orb = cv2.ORB_create() kp1, des1 = orb.detectAndCompute(img1, None) kp2, des2 = orb.detectAndCompute(img2, None) bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) matches = bf.match(des1, des2)实战应用示例
人脸检测(Haar 级联):
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') faces = face_cascade.detectMultiScale(gray, 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)