自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 小程序简介

WXML是小程序框架设计的一套标签语言,用来构建小程序页面的结构,其作用类似于网页开发中的HTML。

2024-03-06 23:21:29 893

原创 opencv#41 轮廓检测

下一层第一个子轮廓索引。

2024-01-31 12:04:09 658

原创 opencv#40 图像细化

作用:图像细化是将图像的线条从多像素宽度减少到单位像素宽度的过程,又被称为“骨架化”,删除像素点的标准:通常情况下,我们使用二值化图像,我们在判断是否要删除某些像素点时,要进行两次判断。我们需要一个3*3的区域,也就是p1的八邻域范围内的数据,如果黑色的像素数目在2~6之间,则满足了其中的一个条件,在八邻域中,如果按照顺时针方向,有多少次由黑到白的形式?

2024-01-31 11:32:03 709

原创 opencv#39 形态学应用

S1:对原图像进行腐蚀S2:腐蚀结果再次膨胀。

2024-01-29 19:28:03 562 1

原创 opencv#38 形态学操作——膨胀

首先需要给出结构元素,这里以十字形结构元素为例。图像膨胀也是将结构元素与原图像中非0像素进行重合。如下图图像膨胀就是将没有像素值的区域进行填充,之后移动结构元素的中心位置,再次覆盖下一个像素值,得到一个新覆盖结果我们发现结构元素上方没有覆盖像素值为1的像素,因此我们将这个位置也填充为1,依次移动中心位置,直到中心位置覆盖了原图像中所有非0像素。那么就可以得到膨胀后的结果。

2024-01-29 10:57:36 1446

原创 opencv#37 形态学操作——腐蚀

去除图像中微小物体·分离较近的两个物体我们对图像中所有米粒进行二值化处理,之后进行连通域分割以求去整个图像中共用多少米粒,处理结果在可以发现,在上图中有一小块区域上有个小点(非米粒),也被视为有数值的情况。通过图像腐蚀操作就可以将这个微笑区域腐蚀掉,从而得到正确结果。若图像中有两个非常近的圆,这两个圆在像素中并没有连接在一起,但是由于像素离得近,有可能会误认为两个区域为一个区域,那么通过图像腐蚀,就可以将这两个物体尽可能拉大距离,从而较为明显的去分割出两个物体。

2024-01-29 10:30:48 934

原创 opencv#36 图像距离变换

像素间的距离计算的是非零像素距离零像素的长度。

2024-01-28 20:19:32 544 1

原创 opencv#35 连通域分析

像素领域介绍:4邻域是指中心的像素与它邻近的上下左右一共有4个像素,那么称这4个像素为中心像素的4邻域。8邻域是以中心像素周围的8个像素分别是上下左右和对角线上的4个像素。连通域的定义(分割)分为两种:以4邻域为相邻判定条件的连通域分割和8邻域为判定条件的连通域分割。连通域指某个区域内所有像素是相邻的,如果一个像素不能够通过这个区域中的像素到达另一个像素,那么这两个像素就不再同一连通域内。连通域的划分通常采用。

2024-01-28 16:33:24 2105 1

原创 opencv#34 边缘检测(二)

Canny边缘检测是对Sobel算法进行优化的算法,Sobel算子进行边缘检测时得到的边缘信息非常多,而且有些边缘信息较亮,而有些边缘信息较暗,有些边缘信息时存在图像内部,可能是由于光照等因素影响,使得某一个局部区域像素值发生了微小波动,但是通过Sobel算子依然能够将这个波动检测出来,然而此波动却不是真正的边缘,因此Canny算法的思想就是如何去除掉虚假边缘。

2024-01-24 22:15:31 2502 1

原创 opencv#33 边缘检测

图像的每一行每一列都可以看成是一个连续的信号经过离散后得到的数值,例如上图左侧给出的图像由黑色到白色的一个信号,也就是图像中某一行像素变化是由黑色逐渐到白色,我们将其对应在一个坐标轴中,将像素值的大小对应与我们y轴,我们可以得到中间图片的曲线,曲线就表示这图像某一行像素灰度值的变化关系,当我们对此曲线求导,就可以得到最下面图片的曲线,图像的边缘就是图像中像素灰度值发生变化的像素点的集合,通过计算函数导数的方式可以找到灰度值变化的点,导数值大说明灰度值变化大,导数值为0,说明灰度值没有变化。

2024-01-24 11:54:41 1809

原创 opencv#32 可分离滤波

就是将一个线性滤波变成多个线性滤波,这里面具体所指的是变成x方向的线性滤波和y方向的线性滤波。无论先做x方向的滤波还是y方向滤波,两者的叠加结果是一致的,这个性质取决于滤波操作是并行的,也就是每一个图像在滤波的时候,图像滤波区域内的像素是独立进计算的,如果性能允许,我们可以在整个图像内同时计算。

2024-01-23 20:35:12 775

原创 opencv#31 非线性滤波——中值滤波

中值滤波原理与均值滤波相似。在滤波器的范围内,将滤波器所覆盖的图像的像素,进行排序后,选取序列中中间位置的数值作为滤波后的结果,此过程不含任何线性操作,所以称为非线性滤波,对图像中数据进行排序可以很好的移除掉某些区域中突然出现的较大值。例如在下图中3*3的区域内,即使存在着椒盐滤波255,排序后选取中位数可以有效的筛除最大值。即使有两个最大值,也不会出现远大于或远偏离于期望中的数值。所以中值滤波可以很好的滤除突然出现的较大值,也就是我们的椒盐噪声。

2024-01-22 13:32:41 726

原创 opencv#30 线性滤波

Step1:求和。Step2:计算平均值。所谓均值滤波,就是求平均值的意思。我们假设在一个3*3的范围内有一个图像,其中这个图像每一个像素可能含有噪声,也可能不含噪声,我们是不知道的,因此通过均值滤波的方式,对图像中所有像素进行求和,并除以像素个数,得到的结果就是滤波后的结果,将3*3区域的中心位置更改为滤波后的平均值,这样的过程就是均值滤波。

2024-01-22 11:05:16 1499

原创 opencv#29 图像噪声的产生

图像在获取或者传输过程中会收到随机信号的干扰产生噪声。·椒盐噪声:又称作脉冲噪声,它会随机改变图像中的像素值,是由相机成像,图像传输,解码处理等过程产生的黑白相间(像椒盐一样)的亮暗点噪声。·高斯噪声:高斯噪声是指噪声分布的概率密度函数服从高斯分布(正态分布)的一类噪声(这种噪声形式会遍布在图像中每一个位置,也就是说这种噪声是每一个像素都可能会含有的,或大或小)。下图分别是椒盐噪声(要么黑色要么白色,较为明显)和高斯噪声(遍布整个区域的噪声,像黑白电视机的雪花信号一样)的示例图。

2024-01-20 21:43:45 1485 2

原创 opencv#28 图像卷积

图像卷积是图像处理中最为基础的操作之一,其常用在图像的边缘检测,图像的去噪声以及图像压缩等领域。图像卷积主要步骤:Step1:将卷积模板旋转180°。Step2:卷积模板移动到对应位置。Step3:模板内求和,保存求和结果。Step4:滑动卷积模板,处理所有结果。卷积函数在这里称卷积模板卷积模板通常是一个方形的卷积,同时也是一个奇数的卷积,卷积模板通常使用的是一个中心对称的形式。

2024-01-20 19:05:27 1237

原创 opencv#27模板匹配

例如给定一张图片,如上图大矩阵所示,然后给定一张模板图像,如小矩阵,之后,我们在大图像中去搜索与小图像中相同的部分或者是最为相似的内容。

2024-01-19 22:50:10 1220 2

原创 opencv#26 直方图匹配

图像直方图均衡化是将原有的图像直方图的分布形式调整的更为均匀,而如果我希望将图像直方图的分布形式调整的更加集中在某个区域上,那么图像直方图均衡化是没办法实现这个功能的,这就需要本节介绍的内容:直方图匹配。

2024-01-17 22:23:38 504

原创 Yolov8实战学习#1:关键点检测

标注关键点->检测数据集->用数据集训练深度学习算法->对算法做训练调参,性能评估->对新的图像视频摄像头实时画面进行推理预测,并且应用部署在终端设备上(智能手机端,PC端,服务器云端,jetson nano开发板,智能硬件机械臂)。使用labelme标注工具,标注出labelme格式的关键点检测数据集,然后再把label me格式的数据集转换成yolo格式,yolo格式的数据集用来训练yolo系列的算法(这里用yolov8)。我们用yolov8来训练yolov8的关键点检测算法,得到.ph的python文

2023-12-05 21:59:41 660 1

原创 opencv#25 直方图均衡化

本节将介绍如何根据图像的直方图对图像的亮度进行调整。也就是均衡化。通过图像直方图,我们可以判断图像是否过暗或过亮,当图像直方图过多的集中在灰度值较小的区域时,那么它所表示的是图像存在过暗的情况,反之过亮。就会导致图像中的纹理信息没办法很好的显示。

2023-12-02 22:55:51 474

原创 Jetson Nano b01安装qt

出现了“无法执行二进制文件:可执行文件格式错误”,我猜测也许是因为Cpu架构不同。可以看见已经安装好了,打开QT Creator即可正常使用。在文件的安装路径下打开终端,赋予权限后,结果如下。我原本在qt官网上下载了qt的安装文件。然后输入下面的指令,重启。

2023-11-29 22:45:38 395

原创 opencv#24 图像直方图绘制

channels:需要统计的通道索引数组,比如要统计两个图像直方图,那么这个参数就需要给出每个图象需要统计的直方图通道数,例如,需要统计第一张图像中的第0个通道,将数组设置为[0],要统计第二个图像的前两个通道,将数组设置为[1,2],由于是两张图像同时统计,因此第三个参数需要给出的是一个数组中包含数组的形式。如果统计的是一个多个通道,如果将其设为"是",那么统计的结果就会出现一个完整的直方图,将两个通道中的数据生成一张直方图,如果选择的是"否",就分别统计每个通道的图像直方图。

2023-11-26 21:43:08 1000

原创 opencv#27 鼠标事件响应

可以看出,若想绘制运动轨迹,最好的方式就是使用两点连线的形式,但是若鼠标移动的过慢,那么两种方法的结果是一样的。用于检测鼠标事件,比如鼠标进行移动或者点击之类的操作,那么可以通过此函数进行检测,第一个参数时需要进行鼠标响应检测的显示图像的窗口,如果显示图像的命名为窗口,那么参数就要定义为窗口,也就是通过这个参数,我们知道鼠标的响应是与图片息息相关的,如果程序中没有显示图片,那么也就没有办法去检测鼠标的响应。最后一个参数是传递给回调参数的可选参数,是与前面检测鼠标响应所相对应的,一般情况下可不使用。

2023-11-26 20:12:26 512

原创 opencv#26 创建滑动条

好处就是可以在程序运行后实时改变程序中的某个参数。

2023-11-26 18:34:58 343

原创 ESP8266固件(MQTT)烧写步骤

ESP8266的GPIO0接地才是下载模式,悬空是正常工作模式,若你要下载固件,必须把GPIO0接地后,RST接一下地在断开,等待1S,就进入下载模式。GND和GPIO0---------------------------------------------------------GND。ESP8266--------------------------USB-TTL------------------STM32面包板。4.去安信可科技网站下载安信可调试助手和MQTT固件。

2023-11-20 12:26:38 1745 1

原创 opencv#25 拉普拉斯图像金字塔

高斯图像金字塔是一个将原图像进行不断下采样,或者称为不断模糊的这样一个金字塔,我们称之为模糊类型的图像金字塔。那么这种将图像进行模糊,在如果我对它进行上采用,也就是还原过程,那么这个经过模糊又还原之后的图像,与原始图像相差多少,就构成了拉普拉斯图像金字塔(残差图像金字塔)。

2023-11-18 00:18:49 145

原创 opencv#24 高斯图像金字塔

高斯图像序列是由一系列大小不一的图像序列组成的,最大的尺寸是原图像,如上图黑色图像,那么其他图像都是由黑色图像,就是原图像依次生成的,对原图像进行下采样,得到紫色图像,所谓下采样就是对这张图像的尺寸进行缩小, 简单理解为这种图像尺寸的缩小,但是又不是单纯的对图像尺寸缩小,图像缩小后的图像是由原图像采样得到的,因此相当于是在一个16*16的采样中,得到一个8*8的采样图像,因此它的采样频率和尺寸都下降了,所以称为下采样图像,在下采样过程中,不仅可以实现8*8,12*12,15*15都可以称对原图进行下采样。

2023-11-16 21:14:07 108

原创 opencv#23 ROI区域截取

还有一种问题,就是两个矩阵头共用一个数据时,当我通过Mat1访问数据,对它进行修改,比如增加了一部分, 那么我再通过Mat2访问的是同样的数据,那么它就会对图像进行改变,访问的数据就不是原先的图像,但我只希望对Mat1中的数据改变,Mat2数据不变,就涉及到如何存放Mat1和Mat2,当然可以把这张图片,分别存储Mat1和Mat2,使数据分离开,那么这样会造成程序比较复杂,而且如果我在程序中只使用图像的某个区域,是没有办法通过这种形式创建新的这样的数据,这里就设计深拷贝和浅拷贝。·m:深拷贝后的图像。

2023-11-16 20:42:12 105

原创 opencv#22 图像中绘制基础图形

lineType:边界的类型,可取值为FILLED,LINE_4,LINE_8和LINE_AA。·shift:中心坐标和半径数值中的小数位数。·color:图形的颜色,用三通道表示。·pt1:直线起始点在图像中的坐标。·pt2:直线终点在图像中的坐标。·thickness:轮廓的宽度。

2023-11-15 16:45:06 79

原创 opencv#21 图像透视变换

通过这些参数标志就可以选择对应的方法,计算出我们的透视变换矩阵,之后根据透视变换矩阵M,再利用变换关系就可以得到透视变换图像。·dst:透视变换后输出图像,与src数据类型相同,但是尺寸与dsize相同。·borderValue:填充边界使用的数值,默认情况下为0。·solveMethod:计算透视变换矩阵方法的选择标志。·borderMode:像素边界外推方法的标志。·dst[]:目标图像中的四个像素坐标。·src[]:原图像中的四个像素坐标。·dsize:输出图像的尺寸。·M:3x3的变换矩阵。

2023-11-15 16:36:11 77

原创 opencv#20 仿射变换

如果知道原始图像中的三个点和变换后三个点的对应关系,那么就知道了唯一的仿射变换关系,使得原图像变化到变换后的图像,也就是说图像中三个点时一一对应的,通过三个点就知道对应关系,因此被称为三点变换。

2023-11-14 21:55:10 79

原创 opencv#18 图像尺寸变换

我们对图像进行操作的时候,会对图像进行拉伸缩放等一系列变换,这个会造成图像中某个像素点变换前后的位置发生改变,如图所示,有两个像素在进行变换后,造成两个像素同时映射在同一个位置,还有如图,有两个相邻的像素,在变换后这两个像素之间多出了像素...这些问题就带来了图像像素插值,所谓插值就是 如何根据已有像素去推测未知像素的像素值,常用方法有:最邻近法,线性差值法,双线性差值法。最邻近法就是谁离得最近就跟谁相似,这种方式比较简单,但是对于插值效果较差。

2023-11-14 21:40:30 127

原创 opencv#17 LUT查找表

在对图像进行二值化时,将图像的像素与单一的阈值进行比较,从而区分出像素是大于阈值还是小于阈值,这个阈值只能是作用在全局,或者是局部的唯一阈值,如果想将0~255之间所有的像素分割成0,125,255这三个数据,通过阈值化处理是没办法实现的。通过LUT查找表可以实现在0~255之间任意的划分。简单的说LUT查找表可以看成是简单的线性映射,首先规定映射规则,然后将所有像素根据此规则进行映射。比如下图在0~99全定义为0,100~252定义为1,253~255定义为2。

2023-11-14 20:57:51 118

原创 opencv#16 图像二值化

比如有个原始信号,图片中的横线表示阈值,当信号大于阈值,定义为最大输出,当信号小于阈值,定义为最小输出。阈值化可以简单地将其理解为一个信号的滤波。

2023-11-13 11:21:20 122

原创 opencv#15 图像像素逻辑操作

异或:同0,不同1;对于8位,要将其转化为二进制,比如1111 1111 的十进制是255。比如0000 0101(5)与0000 0110(6)进行与运算:0000 0100(4)

2023-11-12 23:30:00 90 1

原创 opencv#14 两张图像像素比较

dst:保留对应位置较大(较小)灰度值后的图像矩阵,尺寸,通道数和数据类型与src1一致。作用:如果想保留原始图像种,小于3的值,将大于等于3的数字和都是3的矩阵进行比较,取较小值。·minLoc:指向最小位置的指针,如果不需要,则使用NULL。·maxLoc:指向最大位置的指针,如果不需要,则使用NULL。·minVal:指向最小值的指针,如果不需要,则使用NULL。·maxVal:指向最大值的指针,如果不需要,则使用NULL。·src1:第一个图像矩阵,可以是任意通道数的矩阵。

2023-11-12 12:17:16 108 1

原创 opencv#13 多通道分离与合并

m:待分离的多通道图像·mv:分离后的单通道图像,为向量vector形式。

2023-11-12 10:39:51 113 1

原创 opencv#12 图像颜色空间变换

RGB模型是一个空间立体形式,由三个通道组成,每个通道分别表示不同的颜色分量,然后将这三个颜色分量叠加,就能看到彩色的现象,比如三个通道里面都是黑色,那么最后合成的结果就是黑色,若三个颜色的通道值都为最大,比如是最亮的红色,蓝色,绿色,那么合成的颜色就会是白色。我们在图像中常用的数据区间是由0-255组成,和上图中的0-1对应。就相当于我们将8U(8位无符号整数)压缩到0-1之间,这种形式相当于是一个连续的色彩变换,可以组合出很多种颜色,使用离散型,也可以组合出很多颜色。

2023-11-12 10:12:27 232 1

原创 opencv#11 视频加载与摄像头使用

apiPreference:读取数据时设置的属性,例如编码格式,是否调用OpenNI等。·fourcc:压缩帧的4字符编解码代码,详细参数在表2-7给出。·filename:保存视频的地址和文件名,包含视频格式。·filename:读取的视频文件或者图像序列名称。·fps:保存视频的帧率,即视频中每秒图像的张数。·isColor:保存视频是否为彩色视频。·framSize:视频帧的尺寸。

2023-11-11 23:13:13 169 1

原创 opencv#10 图像读取、显示与保存

filename:需要读取图像的文件名称,包含图像地址、名称和图像文件扩展名。·winname:要显示图像的窗口的名字,用字符串形式赋值。·filename 保存图像的地址和文件名,包含图像格式。·winname:窗口名称,用作窗口的标识符。·params 保存图片格式属性设置标志。·img 将要保存的Mat类矩阵变量。·flags:读取图像形式的标志。·flags:窗口属性设置标志。·mat:要显示的图像矩阵。

2023-11-11 16:15:44 79 1

原创 opencv#9 Mat支持的运算

e = a + b;·f = c - d;·g = 2 * a;·h = d/2.0;·i = a - 1;

2023-11-11 15:27:06 65 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除