- 博客(33)
- 收藏
- 关注
原创 OpenCV对比度增强
可以看到增强对比度确实可以提高图像细节,位置(2,3)增强对比度的结果与(3,4)增加亮度的结果,还是对比度增强效果要好一些,大家也可以试试其他参数。高对比度的图像具有更鲜明的明暗区域,视觉效果更清晰,对比度增强的原理是通过调整图像中像素的亮度值,使图像的明暗差异更加明显。可以看到划分块的尺寸越小,细节效果越好,尺寸越大的,肉眼可见感觉噪声较大。可以看到,越来越亮,但是噪声也同样放大了,特别是到40的时候噪声更明显。可以看到:整体的亮度增加了,亮和暗的细节也有部分丢失。(如 2.0)和适中的。
2025-02-20 17:33:47
1125
原创 OpenCV二值化处理
二值化操作将灰度图像转换为黑白图像,即将图像中的像素值分为两类:前景(通常为白色,值为 255)和背景(通常为黑色,值为 0)。二值化的主要目的是简化图像,突出目标物体,便于后续的图像分析和处理,如特征提取、目标检测、图像分割等。可以观察到OTSU检查出来的划痕更完整,大家可以修改全局阈值法的值127减少和增大分别会发生什么。可以看到全局阈值发和OTSU自动化阈值法效果还可以,自适应阈值法提取效果没有那么好。
2025-02-19 14:43:53
1425
原创 OpenCV形态学操作
形态学操作是一种基于图像形状的处理方法,主要用于分析和处理图像中的几何结构。其核心是通过结构元素(卷积核)对图像进行扫描和操作,从而改变图像的形状和特征。腐蚀(Erosion):将图像中的前景物体边界向内收缩,使物体变小。膨胀(Dilation):将图像中的前景物体边界向外扩展,使物体变大。开运算(Opening):先腐蚀后膨胀,用于去除小噪点。闭运算(Closing):先膨胀后腐蚀,用于填补小孔。去噪:通过腐蚀或开运算去除小的噪点。边缘提取:通过形态学梯度(膨胀与腐蚀的差)突出边缘。图像分割。
2025-02-18 15:59:24
1045
原创 OpenCV中的边缘检测
边缘检测是图像处理和计算机视觉中的关键技术之一,旨在识别图像中像素强度发生显著变化的区域,这些区域通常对应于物体的边界或轮廓。
2025-02-17 15:36:43
1218
原创 openCV中如何实现滤波
原理自定义高通滤波器通过定义特定的卷积核来实现高通滤波。用户可以根据需求设计不同的卷积核,以达到不同的滤波效果。卷积核的设计通常基于高斯函数或其他数学函数,以实现对特定频率的增强或抑制。作用自定义高通滤波器可用于实现特定的图像增强效果,如锐化、边缘检测和细节提取等。实现方式使用函数src, # 输入图像ddepth, # 输出图像的深度,通常设置为 cv2.CV_64Fkernel, # 自定义的卷积核borderType=cv2.BORDER_DEFAULT # 边界扩展方式应用锐化。
2025-02-14 15:07:01
1196
原创 有哪些滤波,原理是什么,分别在什么时候用
结合了空间邻域和像素值差异的滤波方法,计算滤波结果时考虑像素点的空间距离和像素值的差异。对去除椒盐噪声非常有效,可以在不破坏图像边缘等细节的情况下,有效地去除这些噪声点。简单易实现,能够对信号或图像进行一定程度的平滑处理,降低噪声的影响。对精度要求不高的图像或信号平滑场景,如视频监控中的简单图像预处理。能够增强图像的细节和边缘,使图像更加生动和逼真。能够在保存图像细节的同时滤除图像中的噪声。需要尽量保存图像细节的同时去除噪声的场景。能够在保存图像细节的同时滤除图像中的噪声。
2025-02-14 14:59:39
524
原创 图像滤波——为什么需要图像滤波
在图像处理中,噪声指的是图像中不需要的、随机的或干扰性的信息,这些信息会降低图像的质量,影响图像的视觉效果和后续处理的准确性。噪声通常来源于图像的采集、传输或存储过程,也可能由于环境因素或设备性能的限制而产生。后续将继续了解有哪些图像滤波,原理是什么,在什么情况下使用。
2025-02-13 09:27:21
914
原创 OpenCV视频基础操作
读取mp4格式的视频,将每一帧改为灰度图,并且打上水印(“WaterMark”),并将其输出保存为out.mp4,在这个例子中可以看到视频读取,每帧数据处理,视频保存的整体流程简单示例。是一个用于捕获视频的类,可以从视频文件、摄像头或网络视频流中读取视频帧。它的构造函数和方法支持多种参数和重载形式,以便灵活地处理不同的视频源。是 OpenCV 库中用于创建视频写入对象的函数,可以将一组图像帧保存为视频文件。获取视频的各种属性,例如宽度、高度、帧率等。通过循环逐帧读取视频,并处理每一帧。
2025-02-12 14:18:21
548
原创 OpenCV图片的基本操作
结论:如果需要用户交互则用cv2.imshow(),如果需要标注坐标系则用matlpltlib.pyplot。BGR/RGB格式的 shape为(Height,Width,Channels)函数可以读取图片文件。OpenCV 默认以 BGR 格式读取彩色图像。灰度图像的shape为(Height,Width)可以获取图片的尺寸、通道数、数据类型等信息。函数可以将处理后的图像保存到文件。不同格式shpe信息有所差异。
2025-02-11 17:00:48
725
原创 图片在计算机中是如何存在的
灰度图像:用二维数组表示,每个元素是一个像素的灰度值。彩色图像:用三维数组表示,数组的形状为。NumPy 数组:OpenCV 读取的图像通常以 NumPy 数组的形式存储。图像文件格式:常见的格式包括 BMP、JPEG、PNG、TIFF 等。内存布局:图像数据通常以行优先的方式存储。图像压缩:通过有损或无损压缩减少存储空间。元数据:描述图像属性的附加信息。
2025-02-11 09:49:52
587
原创 理解数据库的Join
通过这些高级用法,可以更灵活地使用JOIN来组合和查询多个表中的数据。JOIN不仅可以用于简单的表连接,还可以结合子查询、WHERE子句、ORDER BY子句、GROUP BY子句和HAVING子句来解决复杂的查询需求。
2025-02-05 21:42:13
593
原创 数据库查询优化——索引
B树索引:适用于范围查询、排序和分组操作。哈希索引:适用于等值查询和内存表,注意储存引擎全文索引:适用于文本搜索和搜索引擎。位图索引:适用于低基数字段和数据仓库。每种索引都有其特定的适用场景,选择合适的索引类型可以显著提升数据库的查询性能。
2025-01-24 21:30:53
769
原创 数据库表设计——员工管理系统
项目描述:为一个中型公司设计员工管理系统,有多级部门,以三级为例,员工可以在不同的部门担任领导。该系统需要能查询到员工的基本信息,可以记录员工的工资,奖金,惩罚,每天的通勤情况,请假情况,每月发放调休6小时,每个季度发放调休10h,支持员工查询剩余调休时长,请设计该系统数据库的表为了设计一个满足中型公司需求的员工管理系统,我们需要考虑多级部门结构、员工的基本信息、工资、奖金、惩罚、通勤情况、请假情况以及调休管理。
2025-01-22 22:29:19
615
原创 设计数据库的表
主键是表中一个或多个字段的组合,用于唯一标识表中的每一行记录。主键字段的值必须是唯一的,且不能为NULL。一般情况下是一个字段即可,在单个字段无法表示其唯一性是会用复合主键,比如多对多关系关联表中的外键外键是表中的一个字段或字段组合,用于引用另一个表的主键,从而建立两个表之间的关系。外键的作用是确保数据的引用完整性,即外键字段的值必须是被引用表中主键的有效值,或者为NULL。
2025-01-20 21:17:35
737
原创 初识关系数据库
关系可以被理解为一张二维表。在数学上,关系是从笛卡尔积中选取的一些元素组成的集合。在数据库中,它具体表现为一个表格,用来存储具有相同结构的数据记录。例如,一个学生信息表就是一个关系,表中包含多个学生的信息。
2025-01-18 20:25:32
381
原创 线程通信——信号量与读写锁
信号量是一种同步机制,可以控制同时访问共享资源的最大线程数。它通过维护一个计数器实现,信号量的计数器最大数代表可同时访问共享资源的线程数,线程调用WaitOne()方法时,如果信号量计数器大于0,则计数器减1,并允许线程继续执行;若计数器为0,则线程被阻塞并等待其他线程释放信号量。通过调用Release()方法,可以增加信号量的计数值,从而允许一个或多个等待中的线程获取信号量并继续执行。在 C# 中,是一种用于控制对共享资源的并发访问的锁,适用于读多写少的场景。与普通的锁相比,
2025-01-12 16:24:23
307
原创 线程通信——锁与互斥锁
互斥锁通过控制多个线程在任何时刻只有一个线程拥有互斥锁,从而实现共享资源的访问。它分为命名与非命名的,命名的互斥锁用于夸进程共享,非命名互斥锁通常用于统一进程的不同线程之间。不同线程在获取互斥锁时若该锁未释放,该进程则处于等待状态,使用该锁的线程手动释放之后,等待的线程才能进行访问使用。同一个程序中多线程访问竞争资源,使用锁即可,需要用到跨进程共享竞争资源时再用互斥锁,因为其涉及到跨进程同步,开销更大。
2025-01-07 22:55:33
224
原创 C#项目修改默认启动权限为管理员权限
在运行C#桌面程序的时候发现,当其安装在D盘的时候能够正常运行,但是装在C盘的时候就无法运行了,经过调试发现是缺少权限造成的,如何添加程序启动管理员权限?这里修改完成之后,还需要重新打开项目→属性→安全性,将“启用ClickOnce安全设置”前面的勾去掉后再编译运行。不然程序会报错无法运行。5. 然后保存,重新编译生成即可。此时运行程序就会弹出权限请求对话框了。
2024-01-22 20:04:53
585
原创 XMAL中自定义控件中Grid未布局区域无法捕获Trigger的isMouse相关的事件
此时只能点击有元素的位置触发<Trigger Property="IsMouseOver" Value="True">,不够丝滑。
2023-10-19 15:27:04
133
原创 C#16进制数转为10进制有符号数——处理传感器16进制字节流原始数据
用于接收传感器16进制字节流数据,接收并转化为16进制字符串,并获得数据中所需要的16进制字符串,转为有符号的10进制数据
2022-11-08 17:45:12
1132
转载 C++音视频学习路线
音频复杂的地方不是编解码,而是音效,看下 webRTC里的 Audio Processing module,理解以下几个概念,去噪NS,消回声AEC,静音检测VAD,自动增益控制AGC,webRTC内置的这几个算法虽然不是最好的,但是可以解决90%+的问题了,值得学习下。视频解码只要搞懂h.264就好了,80%+场景都是这个编码格式了,了解基本的 H.264 的 sps pps NAL等文件格式概念,了解YUV图像格式原理,了解YUV到RGB的转换,这样就可以做图像渲染,可以实现一个简单的视频播放器。
2022-11-02 13:07:24
1010
原创 c++函数指针
那么p1是指向bool(const string& s1,const string &s2)函数的指针,括号不能少否则就成了函数返回值的定义,p1成了函数名。//形参中,可省略*,调用方法有所不同。//这是一个bool(const string& s1,const string &s2)函数。//指向int的指针。
2022-10-24 13:17:30
554
原创 c++中默认实参的使用
/错误,一个有默认参数,所有的都要有。//错误不能更改默认参数。当一个函数使用时有标准,常常都是相同的实参的时候,可以使用默认实参。当一个形参使用了默认实参之后,所有的形参都要使用默认形参。
2022-10-24 13:16:34
534
原创 C++中为什么推荐使用引用传参而不推荐使用指针传参
对于要改变传入参数值的情况,推荐使用引用传参,代码比较简单不需要解引用,避免出现错误。函数不能改变的形参,使用。
2022-10-23 23:35:41
1502
原创 MySql可视化与C#连接使用(于小白)
本文主要介绍了C#与MySql连接的主要步骤,以及对于新手(本人)较为友好的可视化数据库与c#联调的方法的实现记录
2022-10-09 22:49:21
794
原创 vscode对‘_imp__recv@16’未定义的引用(Right ‘‘_ imp__ recv@16 ’Undefined reference)
vscode解决对‘_imp__recv@16’未定义的引用等一系列问题
2022-07-06 09:39:27
581
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人