OpenCV图片操作100例:从入门到精通指南(1)

OpenCV图片操作100例:从入门到精通指南

本文整理了100个OpenCV实用技巧,涵盖图像处理各个领域,助你轻松掌握计算机视觉核心技能!

一、入门必备:基础操作

1. 图像读写与显示

import cv2

# 读取图像(BGR格式)
img = cv2.imread('image.jpg')  

# 显示图像
cv2.imshow('示例图片', img)
cv2.waitKey(0)  # 按任意键退出
cv2.destroyAllWindows()

# 保存图像
cv2.imwrite('output.jpg', img)

2. 常用图像转换

# BGR转灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# BGR转HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 缩放图像
resized = cv2.resize(img, (new_width, new_height))

3. 图像基本处理

# 图像翻转
flipped_h = cv2.flip(img, 1)  # 水平翻转
flipped_v = cv2.flip(img, 0)  # 垂直翻转

# 图像裁剪
cropped = img[y:y+h, x:x+w]

# 图像旋转
M = cv2.getRotationMatrix2D((center_x, center_y), 45, 1.0)
rotated = cv2.warpAffine(img, M, (w, h))

二、图像增强技巧

4. 模糊与降噪

# 高斯模糊
blurred = cv2.GaussianBlur(img, (15, 15), 0)

# 中值滤波(椒盐噪声克星)
median = cv2.medianBlur(img, 5)

# 双边滤波(保留边缘)
bilateral = cv2.bilateralFilter(img, 9, 75, 75)

5. 边缘检测

# Canny边缘检测
edges = cv2.Canny(img, 100, 200)

# Sobel算子
sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=5)
sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=5)

6. 阈值处理

# 全局阈值
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 自适应阈值
adaptive = cv2.adaptiveThreshold(
    gray, 255, 
    cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
    cv2.THRESH_BINARY, 11, 2
)

三、特征检测实战

7. 轮廓检测

# 查找轮廓
contours, _ = cv2.findContours(
    edges, 
    cv2.RETR_EXTERNAL, 
    cv2.CHAIN_APPROX_SIMPLE
)

# 绘制轮廓
result = img.copy()
cv2.drawContours(result, contours, -1, (0,255,0), 2)

# 计算轮廓面积
area = cv2.contourArea(contours[0])

8. 特征点检测

# ORB特征点检测
orb = cv2.ORB_create()
keypoints = orb.detect(gray, None)

# 绘制特征点
img_kp = cv2.drawKeypoints(
    img, keypoints, None, 
    flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS
)

9. 模板匹配

# 单对象匹配
result = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
top_left = max_loc

四、图像分析进阶

10. 形状分析

# 凸包检测
hull = cv2.convexHull(contours[0])
cv2.drawContours(img, [hull], 0, (0,0,255), 2)

# 最小外接圆
(x,y), radius = cv2.minEnclosingCircle(contours[0])
cv2.circle(img, (int(x),int(y)), int(radius), (255,0,0), 2)

11. 颜色分析

# 颜色直方图
hist = cv2.calcHist([img], [0], None, [256], [0,256])

# 提取特定颜色范围(如蓝色)
lower_blue = np.array([100, 50, 50])
upper_blue = np.array([140, 255, 255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)

12. 图像分割

# 分水岭算法
markers = cv2.watershed(img, markers)
img[markers == -1] = [255,0,0]  # 标记边界

# GrabCut交互式分割
mask = np.zeros(img.shape[:2], np.uint8)
rect = (50,50,450,290)
cv2.grabCut(img, mask, rect, None, None, 5, cv2.GC_INIT_WITH_RECT)

五、实用应用案例

13. 人脸检测

# 加载预训练模型
face_cascade = cv2.CascadeClassifier(
    cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
)

# 人脸检测
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)

14. 图像修复

# 创建破损区域的掩码
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:200, 100:200] = 255

# 图像修复
restored = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)

15. 增强现实

# 虚拟物体叠加
virtual_img = cv2.imread('virtual_object.png', cv2.IMREAD_UNCHANGED)

# 获取透视变换矩阵
M = cv2.getPerspectiveTransform(pts1, pts2)
result = cv2.warpPerspective(
    virtual_img, M, (img.shape[1], img.shape[0]), 
    borderMode=cv2.BORDER_TRANSPARENT
)

100个完整功能列表

分类 数量 功能示例
基础操作 10项 读写图像、格式转换、旋转裁剪等
图像处理 20项 模糊去噪、边缘检测、形态学操作等
色彩处理 10项 颜色分离、阈值处理、直方图均衡等
特征提取 15项 角点检测、特征描述、轮廓分析等
图像变换 15项 仿射变换、透视校正、图像拼接等
分析识别 15项 形状分析、对象检测、模板匹配等
实用应用 15项 人脸识别、图像修复、AR增强等

关注我们并回复【OpenCV100】,后续整理更多实用教程!


如何高效学习这些技巧?​

1️⃣ ​由浅入深学习​:从基础操作开始,掌握后再转向高级功能
2️⃣ ​项目驱动实践​:结合车牌识别、缺陷检测等实际项目
3️⃣ ​官方文档辅助​:opencv.org/documentation 是权威参考资料

立即动手尝试这些强大的图像处理功能吧!在评论区分享你的OpenCV项目经验或学习问题,我们会选择典型问题进行解答~


欢迎扫码关注获取更多计算机视觉干货

#OpenCV #计算机视觉 #图像处理 #Python编程 #人工智能

你可能感兴趣的:(opencv,计算机视觉,人工智能)