
opencv实战
文章平均质量分 84
从零开始实现opencv入门到实战,记录每次解决实际问题的过程
摸鱼的机器猫
这个作者很懒,什么都没留下…
展开
-
opencv 十九 python下实现多线程间rtsp直播流的复用
在多线程拉流的任务场景中,有时需要将一个rtsp拉取多次,每重新打开一次rtsp视频流就要多消耗一次带宽,为此基于类的静态对象实现rtsp视频流的复用。原创 2024-03-28 21:06:03 · 899 阅读 · 0 评论 -
opencv 十八 python下实现0缓存掉线重连的rtsp直播流播放器
使用opencv打开rtsp视频流时,会因为网络问题导致VideoCapture掉线;也会因为图像的后处理阶段耗时过长导致opencv缓冲区数据堆积,从而使程序无法及时处理最新的数据。为此对cv2.VideoCapture进行封装,实现0缓存掉线重连的rtsp直播流播放器,让程序能一直处理最新的数据。原创 2024-03-23 12:58:32 · 1460 阅读 · 0 评论 -
opencv 十七 使用cmake配置opencv c++项目
cmake是什么CMake是一个开源、跨平台的编译(Build)工具,是用来构建、测试和打包软件的。它能够用简单的语句来描述所有平台的编译过程。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。CMake并不直接生成最终的软件,而是产生标准的建构文件(如Unix的Makefile或Windows Visual ,C++的projects/workspaces),这些文件可以被一般的编译工具所使用。cmake能做什么。原创 2024-01-30 14:08:49 · 2998 阅读 · 0 评论 -
opencv 十六 python下各种连通域处理方法(按面积阈值筛选连通域、按面积排序筛选连通域、连通域分割等方法)
本博文基于python-opencv实现了按照面积阈值筛选连通域、按照面积排序筛选topK连通域、 连通域细化(连通域骨架提取)、连通域分割(基于分水岭算法使连通域在细小处断开)、按照面积排序赛选topK轮廓等常见的连通域处理代码。并将代码封装为shapeUtils类,在自己的python代码中import shapeUtil后即可使用相应的连通域处理方法。原创 2023-12-16 17:08:19 · 3926 阅读 · 2 评论 -
opencv 十五 红外图像中虹膜的提取
在医在拍摄过程瞳孔需要进行运动,其通常不在正前方,无法形成圆形,不能使用常规的霍夫圆检测进行提取定位。且在在红外图像中,虹膜区域与巩膜区域差别不明显(具体如下图所示),故需要设计出算法提取红外图像中的虹膜区域。然后获取轮廓并进行椭圆拟合,然后将拟合的椭圆绘制在原图与mask上(画在原图上的椭圆要使用原始值,而画在mask上的椭圆需要对长轴和短轴值进行放大,使其能尽可能的盖住虹膜区域)其先通过二值化方法,获取瞳孔区域(包含闭运算操作,使瞳孔的圆闭合【瞳孔经常出现反光的情况】),最后在对瞳孔区域进行霍夫圆检测。原创 2023-12-13 20:39:46 · 1106 阅读 · 0 评论 -
opencv 十四 二维码的粗定位提取
在进行二维码识别时,二维码成像区域太小,很容易导致识别失败。手机软件(如微信或支付宝)在识别二维码时,发现二维码较小,会自动缩放摄像头。具体实现步骤为:1、读取图片为灰度图,并优化图像质量(使用滤波尽可能减少图像背景的复杂度)2、对图像进行自适应二值化(其可以根据图像局部空间,计算每一个区域的二值化阈值)3、图形显著化,使用大kernel进行均值滤波,使二维码图形在原二值化中变得十分显著【该操作可以提升二维码区域的显著度,弱化背景】4、显著区域提取,根据均值滤波结果进行二值化,并找出最大面积连通域,然原创 2023-11-26 22:58:43 · 1753 阅读 · 0 评论 -
opencv 十三 基于模板匹配实现复杂环境下的车牌区域提取
5、cv::TM_CCOEFF:相关性系数匹配方法,该方法使用源图像与其均值的差、模板与其均值的差二者之间的相关性进行匹配,最佳匹配结果在值等于1处,最差匹配结果在值等于-1处,值等于0直接表示二者不相关。6、cv::TM_CCOEFF_NORMED:归一化的相关性系数匹配方法,正值表示匹配的结果较好,负值则表示匹配的效果较差,也是值越大,匹配效果也好。3、cv::TM_CCORR:相关性匹配方法,该方法使用源图像与模板图像的卷积结果进行匹配,因此,最佳匹配位置在值最大处,值越小匹配结果越差。原创 2023-09-20 21:59:51 · 332 阅读 · 1 评论 -
opencv 十二 计算圆弧图形的起点角度与终点角度
要得到圆弧的起始点与终点,则需要遍历所有拐点,计算其与圆心的夹角,找出其中最大角度(圆弧的终点)与最小角度(圆弧的起点)。在二值图中计算圆弧图形的起点角度与终点角度存在一定困难(opencv没有直接提供相关api接口),需要自行找出圆弧图形的所有像素点,并计算其与圆心的夹角。上述步骤找到的轮廓线上的点太多,需要对其进行拟合,只保留轮廓线上的拐点,这样可以 减少轮廓线上的点,减少运行时间。根据圆上一点的坐标和圆心坐标,求点与圆心之间的夹角的计算公式如下图所示:根据圆心建立坐标系,并以x轴的正方向为起点。原创 2023-09-16 23:08:33 · 1426 阅读 · 6 评论 -
opencv 十一 霍夫圆检测原理及高级使用案例(含优化步骤)
霍夫圆检测与霍夫变换密切相关,霍夫变换是基于极坐标系(是由半径与夹角所描述的一种坐标系)与笛卡尔坐标系(普通的平面坐标系)的相互转变而实现的。笛卡尔坐标系上的一个点,变换到极坐标系上就变成了一条线;反之亦然。然而,基于霍夫变换的霍夫圆检测方法计算量极大,不适合实际应用。在opencv的实现中,是使用霍夫梯度算法进行圆检测。参考链接:https://www.cnblogs.com/bjxqmy/p/12333022.html。原创 2023-09-03 22:18:25 · 13871 阅读 · 4 评论 -
opencv 十 提取车辆照片中的车牌区域(基于颜色特征)
基于基于颜色特征多个图像提取车辆照片中的车牌区域,保证算法的通用性和算法效果稳定。需要对车牌的颜色和颜色空间有所了解。现有知识信息如下:1、车牌的场景颜色为为蓝色、黄色和绿色2、HSV颜色空间的H分量就是描述颜色值3、车牌的颜色在车辆照片中是较为显著的最终实现对各种颜色车牌的提取原创 2023-02-26 09:19:25 · 2025 阅读 · 0 评论 -
opencv 九 提取车辆照片中的车牌区域(基于纹理特征)
在车辆照片中提取车牌区域,需要对图像进行系列变化,移除图像的非车牌区域,使车牌区域在图像中变得显著。目前分析发现,在车辆照片中,车牌区域的特点如下:1、具有固定的颜色(一般车牌为蓝色、白色、黄色、和绿色)2、具备特定的字符(车牌号包含汉字、字母、数字)3、字符具备特定排列规则(车牌号都是水平排列的)目前不考虑考虑颜色实现算法,对于**字符**而言其特征就是**边缘特征丰富**,对于**水平排列**而言其特征就是**形态学算子可以较宽**原创 2023-01-30 20:46:06 · 1328 阅读 · 0 评论 -
opencv 八 液晶屏数字提取
提取特定仪器液晶屏显示区域中的数字。目标液晶屏显示区域为图中面积最大的连通域(将其表述为数字主体区域)。在数字主体区域和周围区域存在一些白点和黑色连通域,需要设法去除这些干扰因素。在得到完好的数字主体区域后,可以使用数字主体区域与原图做与运算,得到原图中的数字区域,然后进行形态学优化即可。原创 2023-01-29 16:32:49 · 1321 阅读 · 0 评论 -
opencv 七 提取缝纫机布料的内轮廓线
在白色背景下拍摄布料的照片,使用图像处理算法找到布料的内轮廓线,用于缝纫机自动缝纫下针。上图的特点是背景区域为白色,目标缝纫区域基本为灰色或黑色。在目标缝纫区域存在一些白点或者白线,需要设法去除这些干扰因素。在得到完好的目标缝纫区域后,可以使用形态学算法求出目标轮廓线(具体为物体内靠近边缘的一条细线,不是外轮廓线)。1、读取图像为灰度图并进行二值化 【imread("filename",0),0:灰度图模式】 2、进行开运算与形态学优化 【通过开运算删除白色小孔洞;通过deleteMinWhiteArea原创 2023-01-18 14:59:52 · 459 阅读 · 0 评论 -
opencv 六 缺陷检测实战2(PCB缺陷检测——小面积缺陷)
使用opencv对PCB进行缺陷检测,具体缺陷类型有开路(断路)、短路、缺口、毛刺。上图为灰度图,黑色部分为电路板路线,其存在缺口、断路、毛刺、短路等缺陷。这些缺陷有的属于白色缺陷,有的属于黑色缺陷,但都属于小面积缺陷。故,可以使用opencv中的形态学算法,如:腐蚀、膨胀、开运算、闭运算等方法提取这些小面积缺陷。解决问题的核心思想如下:用开运算检测毛刺和短路(开运算会消除小面积的白色区域),用闭运算检测缺口和断路(闭运算会消除小面积的黑色区域),开运算与闭运算所的消除结果之和为全部缺陷。原创 2023-01-11 21:49:42 · 8092 阅读 · 7 评论 -
opencv 五 缺陷检测实战1(检测以连通域面积特征为缺陷)
上图为灰度图,由网格状排列黑点和大面积的黑点区域(即缺陷)组成,具体**缺陷类型为粘连**,其**形态学特征为 连通域面积较大**。查找图中缺陷(大面积的黑点)**算法的核心思想为:遍历所有的轮廓,根据面积判断缺陷**,当连通域面积大于一定的值(面积比普通的黑点大),即判断为缺陷,并在原图上标出缺陷轮廓原创 2023-01-09 21:11:20 · 5670 阅读 · 1 评论 -
opencv 四 Mat的基本操作3(高通滤波、低通滤波、对比度调节)
图像滤波分为高通滤波和低通滤波,高通滤波用于求图形的边缘,低通滤波用于图像去噪、图像模糊化等。这里的频是指变化(相邻像素值的变化),高通滤波是指使变化大也就是图像的边缘)的通过(低通滤波是指使变化小(也就是图像中图形)的通过。高通滤波部分涉及到Sobel、Scharr、Laplacian、canny等方法低通滤波 部分涉及: 均值滤波,方框滤波、中值滤波、高斯滤波和双边滤波。原创 2023-01-07 15:59:07 · 4317 阅读 · 1 评论 -
opencv 三 Mat的基本操作2(图像读取保存、颜色空间、裁剪、缩放、旋转)
Opencv中对彩色图的操作同样可以应用于灰度图和二值图,彩色图与灰度图直接的区别在于颜色类型空间类型的不同,这里以彩为操作示例。RGB、BGR、LAB、HSV是常见的3通道(CV_8UC3、CV_32FC3)彩色图类型,灰度图通常是一个通道的图像,二值图的数据类型与灰度图是一样的(CV_8UC1)。原创 2023-01-07 09:38:12 · 4079 阅读 · 1 评论 -
opencv 二 Mat的基本操作1(Mat初始化、基本属性、数学操作、位运算)
Mat的基本操作1(Mat初始化、基本属性、数学操作、位运算)原创 2023-01-07 09:35:32 · 2778 阅读 · 1 评论 -
opencv 一 基本运行环境配置(下载安装、编写代码、配置环境)
从0开始下载opencv并配置环境变量,然后在vs2019中新建c++项目,并配置opencv。最后新建代码,测试opencv的完整教程。原创 2023-01-02 22:30:04 · 15278 阅读 · 1 评论