接上篇,本文将继续分享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.pswp.cn/web/88383.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88383.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88383.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2、Connecting to Kafka

KafkaAdmin-请参阅配置主题ProducerFactory-请参阅发送消息ConsumerFactory-请参阅接收消息从2.5版本开始&#xff0c;每个版本都扩展了KafkaResourceFactory。这允许在运行时通过向引导服务器的配置中添加Supplier<String>来更改引导服务器&#xff1a;setBootstrapServ…

二进制部署CentOS8.5+Kubernetes1.33.2+Docker28.3.1高可用集群

Kubernetes 集群部署202507 本实验主要软件环境及资源如下&#xff1a; 二进制部署CentOS8.5Kubernetes1.33.2Docker28.3.1高可用集群 一、系统要求 ​Kubermetes 系统由一组可执行程序组成&#xff0c;用户可以通过Kubernetes在GitHub 的项目网站下载编译好的二进制文件或…

127. Java 泛型 - 泛型类与子类型

文章目录127. Java 泛型 - 泛型类与子类型1. 泛型类和接口的子类型化示例&#xff1a;ArrayList 和 List2. 自定义泛型接口的子类型化示例&#xff1a;泛型接口的子类型解释3. 泛型类和接口的类型参数4. 总结127. Java 泛型 - 泛型类与子类型 1. 泛型类和接口的子类型化 在 J…

内网服务器怎么设置公网远程访问? windows桌面连接和Linux自带SSH外网异地跨网用完整步骤教程

没有公网IP的本地主机跨网访问是经常需要用到的网络场景。要设置内网服务器在公网进行异地远程访问&#xff0c;需依次完成确保网络连接正常、配置防火墙、启用远程访问服务、和利用类似nat123内网映射外网打通等一系列步骤&#xff0c;以保障不同内网的远程访问的顺利进行。一…

数据提取之bs4(BeautifuSoup4)模块与Css选择器

BeautifuSoup4from bs4 import BeautifulSoup创建对象 <class bs4.BeautifulSoup>soup BeautifulSoup(源码, 解析器)bs4标签种类&#xff08;1&#xff09;tag: 标签print(soup.title, type(soup.title))&#xff08;2&#xff09;获取标签里面的文本内容, 可导航的字符…

CPP中的List

一.list的介绍&#xff1a;1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。2.list的底层是双向链表结构&#xff0c;带有哨兵位的头结点 。3. list与forward_list非常相似&#xff1a;最主要的不同在于forward_list是单…

Ntfs!LfsUpdateLfcbFromRestart函数分析之Ntfs!LfsFindOldestClientLsn

第0部分&#xff1a;//// Find the oldest client Lsn. Use the last flushed Lsn as a starting point.//Lfcb->OldestLsn Lfcb->LastFlushedLsn;LfsFindOldestClientLsn( RestartArea,Add2Ptr( RestartArea, Lfcb->ClientArrayOffset, PLFS_CLIENT_RECORD ),&…

「日拱一码」021 机器学习——特征工程

目录 特征选择 过滤法&#xff08;Filter Methods&#xff09; 方差选择法 相关系数法 卡方检验 包裹法&#xff08;Wrapper Methods&#xff09; 递归特征消除&#xff08;RFE&#xff09; 嵌入法&#xff08;Embedded Methods&#xff09; L1正则化&#xff08;Lasso…

k8s:安装 Helm 私有仓库ChartMuseum、helm-push插件并上传、安装Zookeeper

ChartMuseum 是 Kubernetes 生态中用于存储、管理和发布 Helm Charts 的开源系统&#xff0c;主要用于扩展 Helm 包管理器的功能 核心功能 ‌集中存储‌&#xff1a;提供中央化仓库存储Charts&#xff0c;支持版本管理和权限控制。 ‌ ‌跨集群部署‌&#xff1a;支持多集群环境…

C++编程学习(第二天)

1、求a和b两个数之和。#include <iostream> using namespace std;int main() {int a, b, sum; //定义变量a、b、sumcout << "请输入第一个数字a: "; //打印需要显示的字符串cin >> a; // >&…

毫米波雷达守护银发安全:七彩喜跌倒检测仪重构居家养老防线

在老龄化加速与独居老人数量攀升的背景下&#xff0c;跌倒已成为威胁老年人生命安全的“隐形杀手”。七彩喜跌倒检测仪以毫米波雷达技术为核心&#xff0c;通过“非接触式监测智能预警”重塑居家安全防护体系&#xff0c;为银发群体构建起全天候、无感化的数字守护网。技术突破…

面试复盘:节流中第二次触发的事件?答错补课

面试复盘&#xff1a;节流中第二次触发的事件&#xff1f;答错补课 背景描述 今天面试时被问到一个看似基础但暗藏玄机的问题&#xff1a;“节流&#xff08;Throttle&#xff09;函数中&#xff0c;第二次触发的那一帧事件是否会被丢掉&#xff1f;” 我基于对经典节流实现的…

Spark伪分布式集群搭建(Ubuntu系统)

环境准备 系统要求&#xff1a;Ubuntu 20.04/22.04 LTS 软件版本&#xff1a; Hadoop 3.3.5 JDK 8 Spark-3.5.6-bin-hadoop3 硬件要求&#xff1a;至少4GB内存&#xff0c;20GB磁盘空间 以下是基于Ubuntu系统的Spark伪分布式集群搭建全流程。以Spark 3.5.6 Hadoop 3.3.…

【快手】数据挖掘面试题0001:查找连续三天登录的用户

文章大纲一、测试数据构建二、自连接方案三、窗口函数方案一张用户表&#xff0c;uer_id&#xff0c;signin_date&#xff0c;大概是这么几项&#xff0c;查找连续三天登录的用户。 比如说&#xff0c;1,2两天登录不是连续三天&#xff0c;456登录为连续三天登录&#xff0c;56…

简说scp命令

简单介绍 scp的全称是&#xff1a;Secure Copy Protocol&#xff08;安全复制协议&#xff09;&#xff0c;是Linux中用于在网络中安全传输文件的命令行工具。它基于SSH协议&#xff0c;用于在本地服务器和远程服务器之间&#xff0c;或者两台远程服务器之间复制文件或目录。 s…

自动化测试解决方案Parasoft SOAtest无脚本UI测试实践指南

传统UI自动化测试常面临技术门槛高、维护成本大、稳定性差等挑战。尤其在页面频繁变更时&#xff0c;测试脚本的更新和维护会显著降低测试效率。 自动化测试解决方案Parasoft SOAtest通过可视化操作和智能元素定位技术&#xff0c;无需编写代码&#xff0c;让测试人员能够像真…

vscode配置头文件和编译器

在 VS Code 中配置编译器和头文件路径需要修改两个核心文件&#xff1a;c_cpp_properties.json&#xff08;用于智能提示&#xff09;和 tasks.json&#xff08;用于构建&#xff09;。以下是详细步骤&#xff1a; —### 1. 配置智能提示和头文件路径 (c_cpp_properties.json)作…

HTML+JS+CSS制作一个数独游戏

闲来无事&#xff0c;用HTMLJSCSS制作了一个数独游戏消遣。其实主要是自己做题的时候用笔画删除数字太容易出错&#xff0c;所以想搞一个程序稍微辅助一下。通过制作这个程序&#xff0c;反而提高了手工做题的水平&#xff0c;至少学会了记录步数以便于回退。 20250710功能更新…

嵌入式硬件中电容的基本原理与实现详解02

我们今天重点讨论点知识点如下: 1.各种种类的电容优缺点对比讲解 2.电容的标称值介绍 3.电容的单位介绍 4.常见的电压信号有哪些? 5. 电容的耐压值讲解 6.电容的容值有哪些? 7.12pF、15pF 电容常用在什么场合? 8. 振荡电路中使用的电容常常需要使用什么材质的电容? 9.100n…

Python训练打卡DAY46

DAY46&#xff1a;通道注意力&#xff08;SE注意力&#xff09; 恩师浙大疏锦行 知识点&#xff1a; 不同CNN层的特征图&#xff1a;不同通道的特征图什么是注意力&#xff1a;注意力家族&#xff0c;类似于动物园&#xff0c;都是不同的模块&#xff0c;好不好试了才知道。通…