高效学习路径:
1️⃣ 分阶段学习:
2️⃣ 项目驱动学习:
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️⃣ 跨平台部署:
资源推荐:
立即动手实践这些强大功能!欢迎在评论区分享你的OpenCV项目经验或学习心得~
#OpenCV #计算机视觉 #图像处理 #Python编程 #人工智能
接上篇,本文完整呈现从51到100的OpenCV实用技巧!每个示例都包含核心功能和代码演示,助力你成为计算机视觉大师
# 分离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])
应用:医疗图像中增强特定组织显示
# 高斯金字塔
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)
应用:创建无缝图像拼接
# 创建锐化卷积核
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]])
应用:医学影像增强
# 创建标记图像
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
应用:细胞图像分割
# 预处理
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)
应用:工业零件尺寸检测
# 检索轮廓层次
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)
应用:文档结构分析
# 特征检测
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)
应用:无人机航拍图像拼接
# 特征点跟踪
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))
应用:运动相机视频稳定
# 立体校正
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场景重建
# 创建跟踪器
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)
应用:智能监控系统
# 加载预训练模型
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)
应用:文档自动扫描
# 加载模型
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)
应用:艺术创作辅助
# 加载模型
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)
应用:老旧影像修复
# 光照归一化
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)
应用:产品质量自动化检测
# 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")
应用:边缘设备实时推理
# 提取眼底特征
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))
应用:医学图像分析
# 创建点云窗口
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()
应用:三维重建可视化
# 读取多波段图像
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)
应用:农业遥感监测
# 计算感知哈希
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)
应用:版权保护
# 加载动作识别模型
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 | 图像配准 | 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学习路线图
(公众号二维码)
#OpenCV #计算机视觉 #人工智能 #图像处理 #深度学习