当前位置: 首页 > news >正文

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

接上篇,本文将继续分享OpenCV实用技巧,涵盖图像处理、目标检测、3D视觉等进阶领域!

六、图像变换进阶

17. 图像金字塔

# 高斯金字塔下采样
smaller = cv2.pyrDown(img)# 高斯金字塔上采样
larger = cv2.pyrUp(img)

用于多尺度图像处理,构建图像金字塔

18. 极坐标变换

polar = cv2.warpPolar(img, (300,300), (w//2, h//2), radius, cv2.WARP_POLAR_LINEAR
)

实现直角坐标系与极坐标系转换

19. 非均匀缩放

M = np.float32([[1, 0.5, 0], [0, 1, 0]])
sheared = cv2.warpAffine(img, M, (int(w*1.5), h))

实现图像剪切变形效果

20. 网格扭曲效果

map_x = np.zeros(img.shape[:2], np.float32)
map_y = np.zeros(img.shape[:2], np.float32)
# 创建网格扭曲映射...
distorted = cv2.remap(img, map_x, map_y, cv2.INTER_LINEAR)

实现自定义的网格变形效果

七、形态学操作大全

21. 膨胀操作

kernel = np.ones((5,5), np.uint8)
dilated = cv2.dilate(img, kernel)

扩大亮区域,连接断裂对象

22. 腐蚀操作

eroded = cv2.erode(img, kernel)

缩小亮区域,去除小噪点

23. 开运算

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

先腐蚀后膨胀,去除小物体

24. 闭运算

closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

先膨胀后腐蚀,填充小孔洞

25. 形态学梯度

gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

获取物体轮廓边缘

26. 顶帽操作

tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

提取亮色小特征(如白纸黑字)

27. 黑帽操作

blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

提取暗色小特征(如黑底白点)

八、图像滤波与增强

28. 双边滤波

bilateral = cv2.bilateralFilter(img, 9, 75, 75)

保持边缘锐利的同时降噪

29. 自定义滤波核

kernel = np.array([[0,-1,0], [-1,5,-1], [0,-1,0]])
sharpened = cv2.filter2D(img, -1, kernel)

创建锐化滤波核增强细节

30. 导向滤波

# 使用PyTorch实现导向滤波更佳
# 伪代码:guided_filter = guideFilter(guide, img, radius, eps)

保持边缘的先进滤波技术

31. 非局部均值去噪

denoised = cv2.fastNlMeansDenoisingColored(img, None, 10, 10, 7, 21)

高效去除高斯噪声

32. 拉普拉斯锐化

laplacian = cv2.Laplacian(img, cv2.CV_64F)
sharp = cv2.convertScaleAbs(laplacian)

增强图像边缘和细节

九、视频处理技巧

33. 视频帧读取

cap = cv2.VideoCapture('video.mp4')
while cap.isOpened():ret, frame = cap.read()if not ret: break# 处理帧
cap.release()

34. 视频写入

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

35. 帧差分法

prev_frame = None
while True:ret, frame = cap.read()gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)if prev_frame is not None:diff = cv2.absdiff(gray, prev_frame)_, motion = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)prev_frame = gray

检测视频中的运动区域

36. 背景建模

bg_subtractor = cv2.createBackgroundSubtractorMOG2()
fg_mask = bg_subtractor.apply(frame)

分离前景运动物体

十、3D视觉与相机标定

37. 棋盘格角点检测

pattern_size = (9, 6)
ret, corners = cv2.findChessboardCorners(gray, pattern_size)
if ret:cv2.drawChessboardCorners(img, pattern_size, corners, ret)

相机标定的关键步骤

38. 相机标定

# 准备标定数据
obj_points = []  # 3D点
img_points = []  # 2D点# 执行标定
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, gray.shape[::-1], None, None
)

39. 畸变校正

undistorted = cv2.undistort(img, mtx, dist)

40. 距离测量

# 已知物体大小和焦距
focal_length = 500  # 相机焦距(像素)
known_width = 20.0  # 物体实际宽度(cm)
pixel_width = 150   # 图像中的物体宽度(像素)
distance = (known_width * focal_length) / pixel_width

单目视觉距离测量

十一、目标检测进阶

41. HOG行人检测

hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
rects, weights = hog.detectMultiScale(frame, winStride=(4,4), padding=(8,8), scale=1.05)

42. YOLO目标检测

net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
blob = cv2.dnn.blobFromImage(img, 1/255, (416,416), swapRB=True, crop=False)
net.setInput(blob)
outputs = net.forward(net.getUnconnectedOutLayersNames())

43. 二维码检测

detector = cv2.QRCodeDetector()
data, points, _ = detector.detectAndDecode(img)
if points is not None:points = points[0].astype(int)cv2.polylines(img, [points], True, (0,255,0), 3)

十二、图像分析与测量

44. 轮廓近似

epsilon = 0.01 * cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, epsilon, True)
cv2.drawContours(img, [approx], 0, (0,255,0), 2)

45. 最小外接矩形

rect = cv2.minAreaRect(cnt)
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(img, [box], 0, (0,0,255), 2)

46. 最小外接圆

(x,y), radius = cv2.minEnclosingCircle(cnt)
center = (int(x), int(y))
radius = int(radius)
cv2.circle(img, center, radius, (255,0,0), 2)

47. 椭圆拟合

if len(cnt) >= 5:ellipse = cv2.fitEllipse(cnt)cv2.ellipse(img, ellipse, (0,255,0), 2)

十三、高级处理技巧

48. 图像修复

damaged = img.copy()
mask = np.zeros(img.shape[:2], np.uint8)
# 创建受损区域...
restored = cv2.inpaint(damaged, mask, 3, cv2.INPAINT_TELEA)

49. 高动态范围成像

# 准备不同曝光度的图像
images = [img1, img2, img3]  
times = [0.5, 1.0, 2.0]  # 曝光时间# 合并HDR图像
calibrate = cv2.createCalibrateDebevec()
response = calibrate.process(images, times)
merge = cv2.createMergeDebevec()
hdr = merge.process(images, times, response)

50. 图像拼接

stitcher = cv2.Stitcher_create()
status, panorama = stitcher.stitch([img1, img2])
if status == cv2.Stitcher_OK:cv2.imshow('Panorama', panorama)

十四、实用工具集锦(51-100)

分类示例代码功能描述
绘图cv2.line(img, pt1, pt2, (0,0,255), 3)绘制直线
绘图cv2.arrowedLine(img, pt1, pt2, (0,255,0), 2)绘制箭头
绘图cv2.ellipse(img, center, axes, 0,0,360, (255,0,0), 2)绘制椭圆
计算dist = cv2.norm(pt1, pt2)计算两点距离
计算angle = cv2.fastAtan2(dy, dx)计算角度
变换log_trans = cv2.log(1 + img.astype(np.float32))对数变换
分割markers = cv2.watershed(img, markers)分水岭分割
分割ret, markers = cv2.connectedComponents(binary)连通域分析
光流next_pts, status, err = cv2.calcOpticalFlowPyrLK(prev_gray, gray, prev_pts, None)LK光流法
跟踪tracker = cv2.TrackerKCF_create()KCF跟踪器
显示cv2.displayStatusBar("Window", "Processing...", 1000)状态栏显示
显示cv2.putText(img, "FPS: " + str(fps), (10,30), font, 1, (0,0,255), 2)显示FPS
优化img_roi = cv2.UMat(img_roi)使用UMat加速
文件fs = cv2.FileStorage("data.yml", cv2.FILE_STORAGE_WRITE)YML文件存取
卷积filtered = cv2.filter2D(img, -1, kernel)自定义卷积
统计min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(gray)极值查找
特征orb = cv2.ORB_create(nfeatures=500)ORB特征点
匹配matcher = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)特征匹配
颜色lab = cv2.cvtColor(img, cv2.COLOR_BGR2Lab)转换到Lab
颜色mean_color = cv2.mean(img, mask)计算均值
二值thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2)自适应阈值
形态thinned = cv2.ximgproc.thinning(binary)细化操作
积分integral = cv2.integral(img)积分图像
距离dist_transform = cv2.distanceTransform(binary, cv2.DIST_L2, 3)距离变换

完整100例速查表

类别数量代表功能
基础操作12项读写、转换、裁剪、旋转
增强处理18项滤波、降噪、边缘检测
特征分析16项角点、轮廓、特征点
目标检测10项人脸、行人、二维码
3D视觉8项标定、畸变校正、测距
视频处理8项读写、运动检测、跟踪
图像变换10项仿射、透视、极坐标
实用工具18项绘图、计算、文件操作

关注我们并获取更多【OpenCV100】获取更多示例

http://www.dtcms.com/a/270479.html

相关文章:

  • java17 gc笔记
  • 论文阅读|汽车虚拟环绕音响系统设计与实现策略的比较研究
  • 新加坡国立大学基于多维度EHR数据实现细粒度患者队列建模,住院时间预测准确率提升16.3%
  • Android网络层架构:统一错误处理的问题分析到解决方案与设计实现
  • java中list.remove(item); // 直接移除会导致ConcurrentModificationException
  • Android ViewModel机制与底层原理详解
  • N8N与Dify:自动化与AI的完美搭配
  • 零基础Qt 5 安装教程
  • 【深度学习新浪潮】什么是蛋白质反向折叠模型?
  • cad_recognition 笔记
  • 前端规范化设计详解
  • ORA-600 kokiasg1故障分析---惜分飞
  • [1-01-01].第50节:泛型 - 泛型的使用
  • Python标准库 bisect 模块
  • 云原生技术与应用-容器技术技术入门与Docker环境部署
  • 【洛谷题单】--顺序结构(一)
  • OSPFv3与OSPFv2不同点
  • eslint扁平化配置
  • Linux守护进程
  • 【ES实战】ES客户端线程量分析
  • java-网络编程
  • Java中数组与链表的性能对比:查询与增删效率分析
  • RabbitMQ第二章(RocketMQ的五大工作模式)
  • 【Linux服务器】-安装ftp与sftp服务
  • 数据结构:数组:合并数组(Merging Arrays)
  • 20 道 Node.js 高频面试题
  • Codeforces Round 868 (Div. 2) D. Unique Palindromes(1900,构造)
  • 深入企业内部的MCP知识(四):FastMCP装饰器与类方法:正确结合面向对象与MCP组件的实践指南
  • 4.权重衰减(weight decay)
  • MySQL-索引