- 博客(48)
- 问答 (1)
- 收藏
- 关注
原创 qt使用mysql数据库(自学笔记)
首先在qt中使用数据库,需要我们根据qt源码自行编译库,具体编译细节请参考Qt 中编译数据库驱动 | 爱编程的大丙 (subingwen.cn)(如有侵权,请联系我删除)。前提:在mysql添加一个db1数据库,在db1内添加一个fam表:create database db1;use db1;create table fam( -> id int primary key, -> name varchar(20), -> address varchar
2022-03-26 13:06:02
8377
原创 基于opencv答题卡识别
1.问题描述:模拟考试答题卡的识别:例如如下图所示的一张答题卡,需要自动识别并标记出考生选择的选项,以及标记出正确答案。考生选择的选项用蓝色标记,标准答案用绿色标记。2.解决思路:2.1 首先打开相机拍摄一张答题卡2//用相机拍一张答题卡 VideoCapture cap(0); if (!cap.isOpened()) { cout << "open failed !"; } Mat frame, gray; cap.read(frame); ..
2022-03-12 16:55:43
5834
1
原创 day39:opencv与深度神经网络应用实例
1.加载深度学习模型void visionagin:: Myreadnet(){ String model = "C:\\Users\\86176\\Downloads\\visionimage\\bvlc_googlenet.caffemodel"; String config = "C:\\Users\\86176\\Downloads\\visionimage\\bvlc_googlenet.prototxt"; dnn::Net net = dnn::readNet(m..
2021-12-23 22:25:31
1625
1
原创 day38:opencv与传统机器学习
1、K均值K均值是最简单的聚类方法之一,是一种无监督学习。K均值聚类的原理是通过指定种类数目对数据进行聚类,例如根据颜色将围棋棋盘上的棋子分成两类.K 均值聚类算法主要分为以下4个步骤。 第一步:指定将数据聚类成看K类,并随机生成K个中心点;第二步:遍历所有数据,根据数据与中心的位置关系将每个数据归类到不同的中心;第三步:计算每个聚类的平均值,并将均值作为新的中心点;第四步: 重复第二步和第三步,直到每个聚类中心点的坐标收敛,输出聚类结果。...
2021-12-20 22:55:56
2059
1
原创 day37:光流法目标跟踪
1.Frameback多项式拓展算法void visionagin:: Myframeback(){ VideoCapture capture("C:\\Users\\86176\\Downloads\\visionimage\\detect.mp4"); if (!capture.isOpened()) { cout << "open failed !" << endl; } Mat preframe, pregray; ca...
2021-12-14 22:49:04
2572
2
原创 day36:均值迁移法目标跟踪
根据差值法检测移动的物体需要视频中只有物体移动,一旦物体移动时背景也发生移动,那么 差值法将无法检测到正确的移动物体,因为图像中每个像素的像素值都发生了改变 并且,有时我 们不但需要检测到移动的物体 而且需要能够跟踪这个物体,无论这个物体是静止还是移动的,都 可以直观地表示其在图像中的位置,进而分析其运动轨迹、运动状态等。void visionagin:: Mymeanshiftfetect2(){ VideoCapture capture("C:\\Users\...
2021-12-13 23:27:02
1950
1
原创 day35:差值法检测移动物体
视频是大量具有时序关系图像的集合,对视频的处理方式与对图像的处理方式相同,另外可以结合时序关系挖掘更深层信息。例如判断拍摄视频时相机是否移动、识别场景中是否存在物体移动、 恢复场景中物体的三维信息等.本章中将重点介绍如何检测视频中移动的物体,并对移动物体进行 跟踪。主要的方法有差值法、均值迁移法和光流法。void visionagin:: Myabsdiff(){ VideoCapture capture("C:\\Users\\86176\\Downloads\\visioni.
2021-12-12 11:44:15
1988
原创 day34:双目视觉
1.双目相机模型2.双目相机标定void visionagin:: Mystersocalibrate(){ //读取左右相机拍摄的照片文件名 ifstream iftL("C:\\Users\\86176\\Downloads\\visionimage\\totalphotosL.txt"), iftR("C:\\Users\\86176\\Downloads\\visionimage\\totalphotosR.txt"); string temp("C:\...
2021-12-11 18:44:07
1061
原创 day33:单目视觉
1.单目相机模型齐次坐标与非齐次坐标转换:void visionagin:: Myhomogeneous(){ vector<Point3f> point3; point3.push_back(Point3f(18, 14, 2)); point3.push_back(Point3f(25, 45, 5)); Mat point4; convertPointsToHomogeneous(point3, point4); Mat point2; co..
2021-12-11 12:02:13
609
原创 day32:特征点匹配
特征点匹配就是在不同的图像中寻找同一个物体的同一个特征点.因为每个特征点都具有标志着唯一身份和特点的描述子,因此特征点匹配其实就是在两个图像中寻找具有相似描述子的两个特征点.根据描述子特点的不同 ,寻找两个相似描述子的方法也不尽相同,总体上可以总结为两类:第一类是计算两个描述子之间的欧氏距离,这种匹配方式的特征点有 SIFT 特征点、 SURF 特征点 等.第二类是计算两个描述子之间的汉明距离 这种匹配方式的特征点有 ORB 特征点、 BRISK特征点等.特征点匹配是图像处理领域寻找不同图
2021-12-06 22:46:19
3222
原创 day31:特征点检测
特征点与角点在宏观定义上相同,都是能够表现图像中局部特征的像素点,但是特征点区别于角点的是其具有能够唯一描述像素点特征的描述子,例如该点左侧像素比右侧像素的像素值大、该点是局部最低点等.通常特征点由关键点和描述子组成。例如SIFT特征点、 ORB 特征点等,都需要先计算关键点坐标之后再计算描述子.1.关键点2.描述子描述子是用来唯一描述关键点的一串数字,与每个人的个人信息类似。通过描述子可以区分两个不同的关键点,也可以在不同的图像中寻找同一个关键点.描述子的构建方式多种多样。例如..
2021-12-05 19:46:20
216
原创 day30:角点检测
在图像处理中有时不需要使用物体所有像素点 ,例如二维码定位、计算二维码尺寸时只需要使用二维码的4个顶点,因此有时我们需要从图像中提取能够表示图像特性或者局部特性的像素点 ,这些像素点称为角点或者特征点,使用特征点可以极大地减少数据量,提高计算速度.特征点广泛应用在图像处理的各个领域,例如基于特征点的图像匹配、基于特征点的定位与三维重建。角点是图像中某些属性较为突出的像素点,例如像素值最大或者最小的点、线段的顶点、孤立的边缘点等.常用的角点有以下几种:• 灰度梯度值的最大值对应的像素点. •
2021-12-01 19:41:02
384
原创 day29:图像修复
在实际应用中,图像常常会受到噪声的干扰,例如拍照时镜头上存在灰尘或者飞行的小动物。这些 干扰会导拍摄到的图像出现部分内容被遮挡的情况.对于较为久远的图像,可能只有实体图像而没有数字存储形式的底板,因此相片在保存和运输过程中可能产生刮痕,导致图像中信息的损坏和丢失. 图像修复技术就是利用图像中损坏区域边缘的像素. 即根据像素值的大小以及像素间的结构关系,估计出损坏区域可能的像素排列,从而去除图像中受"污染"的区域。图像修复不但可以去除图像中的划痕,而且可以去除图像中的水印、日期等.void v
2021-11-29 21:36:11
2662
原创 day28:图像分割
图像分割是指将图像中属于某一类的像素点与其他像素点分开,例如:在黑白相间的图像中, 将黑色和白色分开就是图像分割.图像分割对于提取图像中的重要信息具有重要的作用.准确的图 像分割有助于提高对图像内容的理解,以及后续的图像处理.常见的图像分割算法有漫水填充法、 分水岭法、 Grabcut 法、 Mean-Shift 法和 KMeans法,本节中将介绍前4种图像分割方法.1.漫水填充法:漫水填充法是根据像素灰度值之间的差值寻找相同区域以实现分割.我们可以将图像的灰度值理解成像素点高度.
2021-11-28 11:43:10
2281
原创 day27:积分图像
积分图像主要用于快速计算图像某些区域像素的平均灰度.在没有积分图像之前,计算某个区域内像素的平均灰度值需要将所有像素值相加求和,之后除以像素的数目,这种方式虽然数学原理简单 但是在程序运算过程中显得比较麻烦。因为区域不同时需要重新计算区域内像素值总和,尤其是在同一幅图计算多个具有重叠区域的平均灰度值时,重叠区域内的像素会被反复使用.积分图像的出现使得每一个像素只需要使用1次。对一个 16 *16小尺寸小数值图像求取积分图像的示例程序.在该程序中,首先创建 像素值都为1的16 x...
2021-11-16 21:01:32
344
原创 day26:离散余弦变换
由于二维变换展开形式过于复杂,这里不进行展开 感兴趣的读者可以查阅相关资料进行学习. OpenCV4 提供了 dct()函数用于计算离散余弦变换.离散余弦逆变换离散余弦变换的正逆交换是相反的交换,由于 dct()函数只能变换单通道的矩阵,因此分别对单个通道进行离散余弦变换,并将变换结果重新组成一幅具有三通道的彩色图像。void visionagin::Mydct(){ //对数据进行离散余弦变换 Mat data = (Mat_<float>(5, 5) &l..
2021-11-16 19:51:51
1559
原创 day25:傅里叶变换
1.离散傅里叶变换任何信号都可以由一系列正弦信号叠加形成, 一维领域信号是一维正弦波的叠加,二维领域是 二维平面波的增加.由于图像可以看作是二维信号 因此可以对图像进行傅里叶变换.但是,由于 图像是离散信号,因此对图像的傅里叶变换应该是离散傅里叶变换.离散傅里叶变换能得到图像的频域信息,频域信息可以从另一个方面理解图像。图像中像素波 动较大的区域对应的频域是高频区域,因此高频区域体现的是图像的细节、纹理信息,而低频信息 代表了图像的轮廓信息.通过频域分析也可以实现去除图像中某些
2021-11-16 18:59:20
2281
原创 day24:点集拟合、QR二维码检测
1.点集拟合:实现:void visionagin:: Myminenclosing(){ Mat img(500, 500, CV_8UC3, Scalar(255,255,255)); RNG rng(12345); while (true) { int count = rng.uniform(1, 50); vector<Point>points; for (int i = 0; i < count; ++i)//生成随机点 { Poin
2021-11-09 20:29:08
2076
原创 day23:矩的计算
矩是描述图像特征的算子,广泛应用于图像检索和识剔,图像匹配,图像重建,图像压缩,以 运动图像序列分析等领域。1:几何矩和中心距:计算图像矩的moment()函数:void visionagin::Mymoment(){ Mat src = imread("C:\\Users\\86176\\Downloads\\visionimage\\contour.jfif"); imshow("原图", src); Mat canny; Canny(src, canny, 5
2021-11-08 20:42:33
1443
原创 day22:轮廓检测
1:轮廓发现与绘制:实现:void visionagin::Myfindcontours(Mat& img){ Mat gry, binary; //GaussianBlur(img, img, Size(3, 3),10,20); cvtColor(img, gry, COLOR_BGR2GRAY); threshold(gry, binary, 140, 255, THRESH_BINARY); imshow("二值化图像", binary);...
2021-11-06 18:45:21
128
原创 day21:形状检测
1:直线检测:根据前面的分析可以得到霍夫变换中存在的两个重要的结论:(1)图像空间中的每条直线在参数空间中都对应着单一一个点来表示 (2)图像空间中的直线上任何像素点在参数空间对应的直线相交于同一个点 .因此通过霍夫变换寻找图像中的直线就是寻找参数空间中大量直线相交的一点.但是当图像中存在垂直直线时,即所有的像素点的x坐标相同时,直线上的像素点利用上述霍夫变换方法得到的参数空间中多条直线互相平行,无法相交于一点.为了解决垂直直线在参数空间没有交点的问题,一般采用极坐.
2021-10-26 21:44:54
226
原创 day20:形态学应用
1:开运算:图像开运算可以去除图像中的噪声,消除较小连通域,保留较大连通域,同时能够在两个物体 纤细的连接处将两个物体分离,并且在明显改变较大连通域面积的同时能够平滑连通域的边界. 开运算是图像腐蚀和膨胀操作的结合:首先对图像进行腐蚀,消除图像中的噪声和较小的连通域,之后通过膨胀运算弥补较大连通域因腐蚀而造成的面积减小.2:闭运算:3:形态学梯度:4:顶帽:5:黑帽:6:击中击不中变换:代码示例:void vi...
2021-10-24 19:15:39
96
原创 day19:腐蚀和膨胀
腐蚀:图像腐蚀过程中使用的结构元素可以根据需求自己生成,但是为了研究人员的使用方便, OpenCV4 提供了 getStructuringElement函数用于生成常用矩形结构元素、十字结构元素和椭圆 结构元素.需要注意的是 该函数的腐蚀过程只针对图像中的非零像素 因此,如果图像是以 0像素为背 景,那么腐蚀操作后会看到图像中的内容变得更"瘦 、更小 :如果图像是以 255 像素为背景,那么腐蚀操作后会看到图像中的内容变得更租、更大.代码:void visionag.
2021-10-16 22:59:20
297
原创 day18:像素距离与连通域
在图像形态学运算中,常将不与其他区域连接的独立区域称为集合或者连通域,这个集合中的元素就是包含在连通域内的每一个像素,可以用该像素在图像中的坐标来描述,像素之间的距离可以用来表示两个连通域之间的关系.在了解图像形态学运算之前,首先需要了解图像中两个像素之间的距离描述方式,以及如何从图像中分离出不同的连通域。欧式距离:街道距离:d=|x1-x2|+|y1-y2|棋盘距离: d=max(|x1-x2|,|y1-y2|),两个像素点X方向,y方向距离的最大值...
2021-10-13 21:27:34
600
原创 day17:图像的边缘检测
需要说的是由于求取边缘结果可能会有负数,不在原始图像的 8U 的数据类型内,因此滤波后的图像数据类型为 CV 16S代码:void visionagin::Myedge(Mat& img){ Mat kernelx = (Mat_<float>(1, 3) << 1, 0, -1);//x方向的边缘检测滤波器 Mat kernely = (Mat_<float>(3, 1) << 1, 0, -1);// y 方向的边缘检测...
2021-10-10 22:34:48
213
原创 day16:非线性滤波
非线性滤波的滤被结果不是由滤波器内的像素值通过线性组合计算得到,其计算过程可能包含排序、逻辑计算等. 由于线性滤波是通过对所有像素值线性组合得到滤被后的结果,因此含有噪声的像素点也会被考虑进去,噪声不会被消除 ,而是以更柔和的形式存在.例如,在某个像萦值都为0的黑色区域内,存在一个像素值为 255 的噪声,只要线性滤波器中噪声处的系数不为零,这个噪声就将永远存在,只是通过与滤波器中系数的乘积使得噪声值变得更加柔和,这时使用非线性滤波效果可能会更好,通过逻辑判断将该噪声过滤,常见的非线性滤波有中值滤波和双
2021-10-10 13:41:29
299
原创 day15:线性滤波
图像滤波是指去除图像中不重要的内容而使关心的内容表现得更加清晰的方法,例如去除图像中的噪声、提取某些信息等.根据图像滤波目的的不同,可以将图像滤波分为消除图像噪声的滤波和提取图像中部分特征信息的滤波.图像滤波需要保证图像中关注的信息不在滤波过程中被破坏,因此,图像去除噪声应最大程度不损坏图像的轮廓和边缘信息,同时图像去除噪声后应使图像视觉效果更加清晰.去除图像中的噪声称作图像的平滑或者图像去噪.由于噪声信号在图像中主要集中在高频 ,因此图像去噪可以看作去除图像中高频段信号的同时保留图像的低频段和中频段信
2021-10-08 22:25:39
195
原创 day14:噪声的种类与生成
图像在获取或者传输过程中会受到随机信号的干扰而产生噪声,例如电阻引起的热噪声、光子 噪声、暗电流噪声 以及光响应非均匀性噪声等.由于图像噪声会妨碍人们对图像的理解以及后缕 的处理工作 因此去除噪声的影响在图像处理中具有十分重要的作用.图像中常见的噪声主要有4种,分别是高斯噪声、椒盐噪声、泊松噪声和乘性噪声.要去除噪声,首先需要了解噪声的产生原 因及特性.1:椒盐噪声:椒盐噪声又称作脉冲噪声,它会随机改变图像中的像素值,是由相机成像、图像传输、解码处 理等过程产生的黑白相间的亮暗.
2021-10-07 22:21:59
555
原创 day13:图像卷积
卷积常用在信号处理中,而图像数据可以看作一种信号数据。例如图像中的每一行可以看作测 量亮度变化的信号数据 ,每一列可以看作亮度变化的信号数据 。因此 ,可以对图像进行卷积操作. 在信号处理中 ,卷积操作需要给出一个卷积函数与信号进行计算。图像的卷积形式与其相同 ,需要给出一个卷积模板与原始图像进行卷积计算.整个过程可以看成是一个卷积模板在另外一个大的图像上移动,对每个卷积模板覆盖的区域进行点乘,得到的值作为中心像素点的输出值.卷积首先需要将卷积模板旋转180°之后从图像的左上角开始移动旋转后的卷积.
2021-10-07 20:34:44
89
原创 day12:模板匹配
前面的11节内容中有通过图像直方图反向投影的方式在图像中寻找模板图像 ,由于直方图不能直接反映图像的纹理,因此,如果两幅不同模板图像具有相同的直方图分布特性那么在同一幅图中对这两幅模扳图像的直方图进行反向投影,最终结果将不具有参考意义.因此,在图像中寻找模板图像时,可以直接通过比较图像像素的形式来搜索是否存在相同的内容 这种通过比较像素灰度值来寻找相同内容的方法称作图像模板匹配. 模板匹配常用于在一幅图像中寻找特定内容的任务中,由于模板图像的尺寸小于待匹配图像的尺寸 同时又需要比较两幅图像的每-个像素的
2021-10-07 18:42:06
75
原创 day11:直方图相关操作2
1:直方图均衡化如果一个图像的直方图都集中在一个区域,那么整体图像的对比度比较小,不便于图像中纹理的识别.例如,如果相邻的两个像索灰度值分别是 12 ,21 ,那么仅凭肉眼是无法区别出来的. 同时,如果图像中所有的像索灰皮值都集中在 100- 50 ,那么整个图像会给人模糊的感觉,看不 清图中的内容.如果通过映射关系,将图像中灰皮值的范围扩大,增加原来两个灰度值之间的差值 就可以提高图像的对比度,进而将图像中的纹理突出显现出来,这个过程称为图像直方图均衡化.该函数形式比较简单
2021-10-07 17:23:05
187
原创 day10:直方图相关操作1
1:直方图绘制:图像直方阁就是统计图像中每个灰度值的个数,之后将图像灰度值作为横轴,以灰度值个数或者灰度值所占比率作为纵轴绘制的统计图.通过直方图 看出图像中哪些灰度值数 目较多,哪些较少,可以通过一定的方法将灰度值较为集中的区域映射到较为稀疏的区域,从而使图像在像素灰度值上的分布更加符合期望状态.在通常情况下 像素灰度值代表亮暗程度,因此通过图像直方图 可以分析图像亮暗对比度 并调整图像的亮暗程度. 直方图计算函数见代码,示例为绘制一个三通道图像的直方图,并将纵轴进行了归一化显示。void
2021-10-05 22:28:31
91
原创 day9:窗口交互:滑动条和鼠标事件
1:窗口滑动条:代码示例:通过滑动条改变亮度static void on_change(int a, void* userdata){ Mat temp = *((Mat* )userdata); Mat res; addWeighted(temp, 1, 0, 0, a, res); imshow("trackbar_operate", res);}void visionagin::TrackbarOperate(Mat& img){ int current_val
2021-10-05 11:42:08
110
空空如也
配置opencv_contrib时报错
2021-12-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人