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

高效学习路径:​

1️⃣ ​分阶段学习​:

  • 入门:1-20例(基础操作)
  • 进阶:21-50例(图像处理)
  • 高级:51-100例(计算机视觉)

2️⃣ ​项目驱动学习​:

  • 证件照背景替换(1-15例)
  • 停车场车位检测(30-45例)
  • 视频运动追踪(70-85例)

3️⃣ ​性能优化技巧​:

# 使用UMat加速图像处理
umat_img = cv2.UMat(img)
processed = cv2.GaussianBlur(umat_img, (5,5), 0)
result = processed.get()

# 使用GPU加速
gpu_img = cv2.cuda_GpuMat()
gpu_img.upload(img)
gpu_blur = cv2.cuda_GaussianBlur(gpu_img, (5,5), 0)
blurred = gpu_blur.download()

4️⃣ ​跨平台部署​:

  • 桌面应用(Python + PyQt)
  • Web应用(Flask + WebSocket)
  • 移动端(OpenCV for Android/iOS)

资源推荐:​

  1. 《Learning OpenCV》经典教材
  2. OpenCV官方文档(https://docs.opencv.org)
  3. GitHub优秀项目:opencv_contrib

立即动手实践这些强大功能!欢迎在评论区分享你的OpenCV项目经验或学习心得~

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

接上篇,本文完整呈现从51到100的OpenCV实用技巧!每个示例都包含核心功能和代码演示,助力你成为计算机视觉大师

51. 图像通道分离与合并

 
  
# 分离RGB通道
b, g, r = cv2.split(img)

# 创建纯色背景
red_channel = cv2.merge([np.zeros_like(b), np.zeros_like(g), r])

# 合并通道时调整权重
weighted_merge = cv2.merge([b*0.5, g*1.2, r*0.8])

应用:医疗图像中增强特定组织显示

52. 图像金字塔融合

 
  
# 高斯金字塔
G1 = img.copy()
gp1 = [G1]
for i in range(6):
    G1 = cv2.pyrDown(G1)
    gp1.append(G1)
    
# 拉普拉斯金字塔
lp1 = [gp1[5]]
for i in range(5,0,-1):
    GE = cv2.pyrUp(gp1[i])
    L = cv2.subtract(gp1[i-1], GE)
    lp1.append(L)

应用:创建无缝图像拼接

53. 自定义卷积核锐化

 
  
# 创建锐化卷积核
kernel = np.array([[-1,-1,-1], 
                   [-1, 9,-1],
                   [-1,-1,-1]])

# 应用卷积
sharpened = cv2.filter2D(img, -1, kernel)

# 边缘增强版
edge_enhance = np.array([[0, 0, 0],
                         [-1, 1, 0],
                         [0, 0, 0]])

应用:医学影像增强

54. 形态学重建

 
  
# 创建标记图像
marker = np.zeros_like(gray)
marker[20:50, 20:50] = 255

# 重建算法
while True:
    marker_prev = marker.copy()
    dilated = cv2.dilate(marker, kernel)
    marker = np.minimum(dilated, img)
    diff = np.sum(marker - marker_prev)
    if diff <= 0: break

应用:细胞图像分割

55. 霍夫圆检测优化

 
  
# 预处理
blurred = cv2.medianBlur(gray, 7)
edges = cv2.Canny(blurred, 50, 150)

# 参数优化
circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT_ALT, 
                           dp=1.5, minDist=20, 
                           param1=300, param2=0.8,
                           minRadius=5, maxRadius=50)

应用:工业零件尺寸检测

56. 轮廓层次分析

# 检索轮廓层次
contours, hierarchy = cv2.findContours(binary, 
                                      cv2.RETR_TREE, 
                                      cv2.CHAIN_APPROX_SIMPLE)

# 绘制轮廓层级
for i, cnt in enumerate(contours):
    level = 0
    idx = i
    while hierarchy[0][idx][3] != -1:
        level += 1
        idx = hierarchy[0][idx][3]
    cv2.putText(img, f'L{level}', tuple(cnt[0][0]), 
                cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1)

应用:文档结构分析

57. SIFT特征匹配优化

 
  
# 特征检测
sift = cv2.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)

# FLANN匹配器
index_params = dict(algorithm=1, trees=5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(des1, des2, k=2)

# Lowe's比率测试
good = []
for m, n in matches:
    if m.distance < 0.7 * n.distance:
        good.append(m)

应用:无人机航拍图像拼接

58. 视频稳像技术

 
  
# 特征点跟踪
prev_pts = cv2.goodFeaturesToTrack(prev_gray, maxCorners=200, 
                                  qualityLevel=0.01, minDistance=30)

# 光流跟踪
curr_pts, status, err = cv2.calcOpticalFlowPyrLK(prev_gray, curr_gray, 
                                                prev_pts, None)

# 计算仿射变换矩阵
M, _ = cv2.estimateAffinePartial2D(prev_pts[status==1], 
                                  curr_pts[status==1])

# 稳定帧
stabilized = cv2.warpAffine(curr_frame, M, (w, h))

应用:运动相机视频稳定

59. 深度估计(立体视觉)

 
  
# 立体校正
left_maps = cv2.initUndistortRectifyMap(...)
right_maps = cv2.initUndistortRectifyMap(...)

# 校正图像
left_rectified = cv2.remap(left_img, left_maps[0], left_maps[1], cv2.INTER_LINEAR)
right_rectified = cv2.remap(right_img, right_maps[0], right_maps[1], cv2.INTER_LINEAR)

# 计算视差图
stereo = cv2.StereoSGBM_create(minDisparity=0, numDisparities=64, blockSize=11)
disparity = stereo.compute(left_rectified, right_rectified)

# 视差转深度
depth = cv2.reprojectImageTo3D(disparity, Q)

应用:3D场景重建

60. 实时目标跟踪

# 创建跟踪器
tracker = cv2.TrackerDaSiamRPN_create()
tracker.init(frame, bbox)

# 跟踪循环
while True:
    success, bbox = tracker.update(frame)
    if success:
        p1 = (int(bbox[0]), int(bbox[1]))
        p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))
        cv2.rectangle(frame, p1, p2, (255,0,0), 2)

应用:智能监控系统

61. 文本检测(EAST模型)

 
  
# 加载预训练模型
net = cv2.dnn.readNet("frozen_east_text_detection.pb")

# 创建blob
blob = cv2.dnn.blobFromImage(img, 1.0, (320, 320), 
                           (123.68, 116.78, 103.94), True, False)

# 前向传播
net.setInput(blob)
scores, geometry = net.forward(["feature_fusion/Conv_7/Sigmoid", 
                              "feature_fusion/concat_3"])

# 后处理获取文本框
rotated_boxes, confidences = decode(scores, geometry, confThreshold=0.5)

应用:文档自动扫描

62. 图像风格迁移

 
  
# 加载模型
net = cv2.dnn.readNetFromTorch("starry_night.t7")

# 预处理
blob = cv2.dnn.blobFromImage(img, 1.0, (400, 400), 
                           (103.939, 116.779, 123.680), False, False)

# 风格转换
net.setInput(blob)
output = net.forward()

# 后处理
output = output.reshape((3, output.shape[2], output.shape[3]))
output[0] += 103.939
output[1] += 116.779
output[2] += 123.680
output = output.transpose(1, 2, 0)

应用:艺术创作辅助

63. 超分辨率重建

 
  
# 加载模型
sr = cv2.dnn_superres.DnnSuperResImpl_create()
sr.readModel("FSRCNN_x2.pb")
sr.setModel("fsrcnn", 2)

# 提升分辨率
result = sr.upsample(img)

# 质量对比
bicubic = cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)

应用:老旧影像修复

64. 工业表面缺陷检测

 
  
# 光照归一化
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
l_norm = clahe.apply(l)
lab_norm = cv2.merge([l_norm, a, b])
img_norm = cv2.cvtColor(lab_norm, cv2.COLOR_LAB2BGR)

# 缺陷提取
diff = cv2.absdiff(img, img_norm)
gray_diff = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
_, defect_mask = cv2.threshold(gray_diff, 30, 255, cv2.THRESH_BINARY)

# 形态学优化
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
defect_mask = cv2.morphologyEx(defect_mask, cv2.MORPH_OPEN, kernel)

应用:产品质量自动化检测

65. 神经网络推理加速

# OpenVINO优化
net = cv2.dnn.readNet("face-detection-adas-0001.xml", 
                      "face-detection-adas-0001.bin")
net.setPreferableTarget(cv2.dnn.DNN_TARGET_MYRIAD)

# CUDA加速
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)

# TensorRT加速
net = cv2.dnn.readNet("model.trt")

应用:边缘设备实时推理

66. 视网膜投影校正

# 提取眼底特征
contours = find_blood_vessels(gray)

# 椭圆拟合
ellipse = cv2.fitEllipse(np.vstack(contours))

# 投影校正
center, axes, angle = ellipse
scale = axes[1] / axes[0]  # 椭圆度
M = cv2.getRotationMatrix2D(center, angle, scale)
corrected = cv2.warpAffine(img, M, (w, h))

应用:医学图像分析

67. 3D点云可视化

 
  
# 创建点云窗口
vis = o3d.visualization.Visualizer()
vis.create_window()

# 创建点云
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(points)

# 添加颜色
colors = img.reshape(-1, 3)/255.0
pcd.colors = o3d.utility.Vector3dVector(colors)

# 可视化
vis.add_geometry(pcd)
vis.run()

应用:三维重建可视化

68. 多光谱图像融合

 
  
# 读取多波段图像
nir = cv2.imread("nir.tif", cv2.IMREAD_GRAYSCALE)
red = cv2.imread("red.tif", cv2.IMREAD_GRAYSCALE)
green = cv2.imread("green.tif", cv2.IMREAD_GRAYSCALE)

# 计算NDVI
ndvi = (nir - red) / (nir + red + 1e-6)
ndvi_normalized = cv2.normalize(ndvi, None, 0, 255, cv2.NORM_MINMAX)

# 伪彩色增强
heatmap = cv2.applyColorMap(ndvi_normalized, cv2.COLORMAP_JET)

应用:农业遥感监测

69. 图像哈希相似度

 
  
# 计算感知哈希
def phash(image, hash_size=16):
    resized = cv2.resize(image, (hash_size, hash_size))
    gray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)
    dct = cv2.dct(np.float32(gray))
    dct_roi = dct[:8, :8]
    avg = np.mean(dct_roi)
    diff = dct_roi > avg
    return diff.flatten()

# 计算汉明距离
def hamming(hash1, hash2):
    return np.sum(hash1 != hash2)

# 应用
hash1 = phash(img1)
hash2 = phash(img2)
similarity = 1 - hamming(hash1, hash2)/len(hash1)

应用:版权保护

70. 视频动作分析

 
  
# 加载动作识别模型
net = cv2.dnn.readNetFromTensorflow("action_recognition.pb")

# 时间序列处理
frames = deque(maxlen=16)
while True:
    ret, frame = cap.read()
    frames.append(frame)
    if len(frames) == 16:
        # 创建时间序列blob
        blob = create_3d_blob(frames)
        net.setInput(blob)
        preds = net.forward()
        action = CLASSES[np.argmax(preds)]

应用:智能安防监控


完整71-100例速查表

编号 功能类别 关键函数/算法 典型应用
71 图像配准 ECC图像对齐 医学影像分析
72 去雾算法 暗通道先验 自动驾驶系统
73 显著性检测 Spectral Residual 目标快速定位
74 稠密光流 Farneback算法 运动轨迹分析
75 语义分割 DeepLab模型 场景理解
76 目标计数 Watershed分水岭 人群密度统计
77 手势识别 凸包分析 人机交互
78 车道检测 Hough变换+滑动窗口 自动驾驶
79 姿态估计 OpenPose集成 体育分析
80 图像抠图 GrabCut+深度学习 电影特效
81 三维测量 PnP问题求解 工业检测
82 图像检索 VLAD特征编码 版权管理
83 虚拟试衣 Thin Plate Spline 电子商务
84 表情识别 面部特征点 人机交互
85 文档矫正 角点检测+透视变换 办公自动化
86 图像水印 DCT域嵌入 数字版权
87 雨雪去除 视频矩阵分解 智能交通
88 聚焦堆栈 多聚焦图像融合 显微摄影
89 行为识别 3D卷积网络 智能监控
90 阴影去除 色彩恒常性 增强现实
91 全景分割 Mask R-CNN 场景理解
92 虚拟现实 姿态估计+渲染 VR应用
93 图像修复 Context Encoder 老照片修复
94 人群计数 MCNN模型 公共安全
95 异常检测 自编码器 工业质检
96 图像着色 条件GAN 历史照片
97 皮肤分析 色度空间转换 医疗美容
98 植物识别 叶脉提取 农业科技
99 水下图像 色彩校正 海洋探索
100 全息显示 菲涅尔衍射 新型显示

后续优化方向:模型部署流程

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

资源推荐:​

  1. ​《OpenCV 4.x 项目实战》​​ - 最新实战案例
  2. Kaggle竞赛数据集​ - 超过50个视觉数据集
  3. Github项目​:opencv_contrib模块源码研究
  4. 在线课程​:OpenCV大学(cv-university.com)

立即开始你的计算机视觉之旅吧!欢迎在评论区分享学习心得或提出技术问题~


扫码关注获取OpenCV学习路线图
(公众号二维码)

#OpenCV #计算机视觉 #人工智能 #图像处理 #深度学习

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