- 博客(42)
- 收藏
- 关注
原创 OpenCV C++ 图像处理实战 ——《物体数量计数与尺寸测量》
本文使用OpenCV C++ 实现物体数量计数与尺寸测量,关键点如下1、图像成像质量不佳时会影响到后续的二值化分割,故我们需要对图像进行图像增强处理,可以多尝试几种不同的图像增强算法。2、图像二值化与形态学处理,这是物体轮廓提取的关键。这步处理得好,后续就可以简化很多步骤。3、轮廓提取。根据二值化轮廓特征,使用轮廓面积、周长、宽高比、圆形度、多边形近似等特征提取我们想要的轮廓。
2024-03-16 11:09:11
1418
原创 OpenCV C++ 图像处理实战 ——《多尺度自适应Gamma矫正的低照图像增强》
本文使用OpenCV C++ 实现多尺度自适应Gamma矫正的低照度图像增强。首先将低照图像转换到 HSI 颜色空间,利用多尺度的 Retinex 提取明度分量 I 的多尺度光照图像,然后对多尺度的光照图像分别进行自适应的 Gamma矫正,其中 Gamma 指数自适应于光照图像的暗区像素的占比。
2024-01-11 19:32:26
990
原创 OpenCV图像处理、计算机视觉实战应用
基于OpenCV C++分享一些图像处理、计算机视觉实战项目。不定期持续更新,干货满满,附源码测试图像。
2023-11-18 12:17:14
1292
1
原创 OpenCV C++案例实战三十三《缺陷检测》
本案例将使用OpenCV C++ 进行PCB印刷缺陷检测。目前缺陷检测算法可分为两大类:一:基于模板匹配的缺陷检测二:基于深度学习的缺陷检测,主要利用目标检测去识别缺陷部分。本文算法主要是基于模板匹配算法进行缺陷检测,参考《基于差异模型的印刷标签缺陷检测算法》一文,进行算法复现,感兴趣的朋友可以去阅读一下原文。本文使用OpenCV C++ 进行PCB印刷缺陷检测,主要操作有以下几点。1、将图像进行仿射变换,与模板图像进行配准2、计算差异图像,得到基于模板的亮、暗阈值图像。
2023-09-02 10:13:13
7164
7
原创 OpenCV C++案例实战三十二《字符识别》
本案例将使用OpenCV C++ 进行字符识别。主要包括制作数据集、以及模型预测两部分。先看看效果如何吧。本文使用OpenCV C++ 进行字符识别,主要操作有以下几点。1、制作数据集,利用键盘输入字符相应的ASCII码2、进行KNN训练,得到训练模型3、将预测结果转回相应的字符char类型。
2023-05-08 19:18:43
5945
2
原创 OpenCV C++案例实战三十一《动态时钟》
本案例将使用OpenCV C++实现动态时钟效果。原理也很简单,主要分为绘制表盘、以及获取系统时间两步。本文使用OpenCV C++ 进行动态时钟绘制,主要操作有以下几点。1、图像预处理,绘制表盘2、绘制表盘刻线3、获取系统时间,注意角度与时间之间的转换。
2023-05-03 11:58:49
2079
5
原创 OpenCV C++案例实战三十《中文点选验证码识别》
相信大家在登陆某个网站时或多或少都会经历过需要验证码才能登陆。常见的验证码方式有字符输入验证码、滑动条拼图验证码以及字符点选验证码。本案例要实现的是中文字符点选验证。本案例逻辑算法仅为本人为实现此功能所设计,供大家参考交流。本文使用OpenCV C++ 进行中文点选验证码识别,主要操作有以下几点。1、图像预处理,提取出字符轮廓并进行切割2、使用鼠标响应事件进行字符点选,即三次有效字符点选3、字符匹配,即按点选顺序与模板顺序进行字符比较4、只有鼠标点击字符与点击顺序都符合要求时,才会验证通过。
2022-10-04 18:29:46
4996
8
原创 OpenCV C++案例实战二十九《遥感图像分割》
本案例基于k-means机器学习算法进行遥感图像分割。主要是用到了OpenCV 中的kmeans API。关于kmeans聚类算法原理大家自行查找资料学习,也比较容易理解,我这里就示范一下如何调用OpenCV中的API进行图像分割。本文使用OpenCV C++ 进行遥感图像分割,主要操作有以下几点。1、将图像像素灰度存储为mat数据格式,用于kmeans分类。2、进行像素分类以及结果显示。
2022-09-17 15:42:44
2916
原创 OpenCV C++案例实战二十八《手写数字识别》
本案例通过使用machine learning机器学习模块进行手写数字识别。源码注释也写得比较清楚啦,大家请看源码注释!!!本文使用OpenCV C++ 利用ml模块进行手写数字识别,源码注释也比较详细,主要操作有以下几点。1、数据集划分为训练集与测试集2、进行KNN训练3、进行模型预测以及结果显示。...
2022-08-07 10:40:59
5440
1
原创 OpenCV C++案例实战二十七《角度测量》
本案例通过使用OpenCV中的鼠标点击事件进行物体角度测量。以鼠标点击三点确定一个角度。第一个点即为需要测量角度所在位置点(中心点),第二、三点确定角度。本文使用OpenCVC++进行物体角度测量,主要操作有以下几点。1、利用鼠标响应事件取点,三点确定一个角度2、利用两直线角度公式计算直线角度,注意弧度转角度3、绘制圆弧,便于显示。注意某一点绕任意点旋转θ角度后的坐标计算公式。httpshttpshttpshttpshttps。......
2022-07-16 11:05:51
5352
2
原创 OpenCV C++案例实战二十六《填空题区域检测》
本案例通过使用OpenCV中的霍夫直线检测HoughLinesP进行填空题区域检测(说白了就是进行直线检测),实现起来也很简单。原图如图所示:首先第一步先进行图像预处理,得到二值图像。通过使用大津阈值进行图像二值化处理,如下图所示,得到一幅二值图像。接下来,需要提取出二值图中直线部分。由图像特征可以看出,直线部分又长又细,所以可以使用形态学操作对图像进行腐蚀操作,仅保留直线部分。在这里我使用的是形态学开操作(先腐蚀,后膨胀)保证能完整的提取出直线部分。由于直线部分又长又细,所以我们在创建kernel时,S
2022-07-10 10:41:26
1643
原创 OpenCV C++案例实战二十五《形状识别》
本案例通过使用OpenCV中的approxPolyDP进行多边形近似,进而进行基础形状识别(圆、三角形、矩形、星形…)。下面就一起来看看具体是如何实现的吧。原图如图所示:首先第一步先进行图像预处理,得到二值图像。结果如图所示。接下来,需要对此二值图像进行轮廓提取,进而识别物体形状。本案例使用approxPolyDP进行形状识别,关于approxPolyDP OpenCV给出的定义是:void approxPolyDP(InputArray curve, OutputArray approxCurve,
2022-07-09 10:26:32
5253
原创 OpenCV C++案例实战二十四《多目标匹配》
本案例要实现的功能是使用OpenCV中的matchTemplate实现多目标匹配。熟悉matchTemplate这个API的小伙伴都知道,仅仅单一使用matchTemplate的话只能实现单一目标匹配,而不能实现多目标匹配。那么接下来我们就一起看看如何使用matchTemplate实现多目标匹配吧。首先加载测试图像与模板图像,如下图所示:测试图像:模板图像:我们的最终目的是在测试图像中找到所有模板图像的物体,并把它框出来。首先将图像灰度化、去噪然后调用matchTemplate进行模板匹配,ma
2022-06-04 10:49:26
5608
20
原创 OpenCV C++案例实战二十三《网孔检测》
OpenCV C++案例实战二十三《网孔检测》前言一、HSV通道转换二、图像修复2.1 OpenCV函数实现2.2 MyFunction三、轮廓提取四、效果显示五、源码总结前言前段时间,有位粉丝私信我,给我发了一张图片,如下图所示:在这里贴出他的原话。从他给的图片分析,该图存在遮挡,所以不能简单的二值化,然后提取图像轮廓去寻找结果。所以,我就想如何去掉这些遮挡物(即图像修复)。从图像可知,该遮挡物是黄色的线,所以,我就想可否使用hsv色彩空间提取出黄色,然后得到二值掩模图像,最后对原图进行修复
2022-05-02 11:26:38
7376
原创 OpenCV C++案例实战二十二《手势识别》
OpenCV C++案例实战二十二《手势识别》前言一、手部关键点检测1.1 功能源码1.2 功能效果二、手势识别2.1算法原理2.2功能源码三、结果显示3.1功能源码3.2效果显示四、源码总结前言本文将使用OpenCV C++ 实现手势识别效果。本案例主要可以分为以下几个步骤:1、手部关键点检测2、手势识别3、效果显示接下来就来看看本案例具体是怎么实现的吧!!!一、手部关键点检测如图所示,为我们的手部关键点所在位置。第一步,我们需要检测手部21个关键点。我们使用深度神经网络DNN模块来完成
2022-04-02 11:47:41
14536
45
原创 OpenCV C++案例实战二十一《制作视频播放器》
OpenCV C++案例实战二十一《制作视频播放器》前言一、源码二、效果总结前言本文将使用OpenCV C++ 制作简易视频播放器,用于实现视频播放基本功能。1、通过创建滑动条来拖动视频画面。2、通过按下空格键实现视频播放与暂停。3、通过键盘←键实现向后快进4、通过键盘→键实现向前快进原理都很简单,通过OpenCV键盘响应事件waitKey实现。通过cap.get(CAP_PROP_POS_FRAMES)获取当前视频播放位置;通过cap.set(CAP_PROP_POS_FRAMES, g_
2022-03-11 19:59:46
7832
2
原创 OpenCV C++案例实战二十《银行卡号识别》
OpenCV C++案例实战二十《银行卡号识别》前言一、获取模板图像1.1 功能效果1.2 功能源码二、银行卡号定位2.1 将银行卡号切割成四块2.1.1 功能效果2.1.2 功能源码2.2 字符切割2.2.1 功能效果2.2.2 功能源码三、字符识别3.1.读取文件3.2.字符匹配3.3.功能源码四、效果显示4.1 功能源码4.2 效果显示五、源码5.1 hpp文件5.2 cpp文件5.3 main文件总结前言本文将使用OpenCV C++ 进行银行卡号识别。主要步骤可以细分为:1、 获取模板图像
2022-01-22 14:32:27
9975
14
原创 OpenCV C++案例实战十九《制作电子相册查看器》
OpenCV C++案例实战十九《制作电子相册查看器》前言一、图片读取二、图片展示三、键盘控制四、效果显示五、源码总结前言本文将使用OpenCV C++ 制作电子相册查看器。类似于win10系统的“照片”功能。接下来就具体来看看是如何一步步的实现吧。一、图片读取我们想要一张张的查看文件夹下的图片,第一步就得读取将该文件夹下的所有图片。如上图所示,为我创建的文件夹,该文件夹下有14张图片。接下来我们就编写代码读取该文件夹下的所有图片。将读取到的图片存储在images容器。 //读取文件夹下所有
2022-01-15 10:56:29
4058
1
原创 OpenCV C++案例实战十八《抖音特效——“蓝线挑战”》
OpenCV C++案例实战十八《抖音特效——“蓝线挑战”》前言一、图像扫描二、生成定格图像三、图像混合四、效果显示五、源码总结前言本文将使用OpenCV C++ 实现抖音上的特效“蓝线挑战”。虽然看起来觉得很牛的样子,但如果了解其中的原理就非常简单了。本案例是我自己对于这个特效实现过程的理解,仅供参考。算法原理可以分为三个流程:1、将视频(图像)从(顶->底)或(左->右)逐行(列)扫描图像。2、将扫描完成的行(列)像素重新生成定格图像。3、使用原帧图像像素填充未扫描到的像素。
2022-01-14 19:00:38
5303
2
原创 OpenCV C++案例实战十七《图像去水印》
OpenCV C++案例实战十七《图像去水印》前言一、水印定位二、图像修复三、效果显示四、源码总结前言本文将使用OpenCV C++ 进行简单图像水印去除。我们在网上download图片时,经常因为版权问题有水印。本案例通过编写算法进行简单水印去除。一、水印定位如图所示,图像左下角、右下角有水印。第一步,我们首先得定位水印所在位置。 Mat gray; cvtColor(src, gray, COLOR_BGR2GRAY); //图像二值化,筛选出白色区域部分 Mat thresh;
2022-01-13 19:11:44
4946
4
原创 OpenCV C++案例实战十六《制作哈哈镜图像》
OpenCV C++案例实战十六《制作哈哈镜图像》前言一、凸透镜1.功能源码2.效果显示二、凹透镜1.功能源码2.效果显示三、源码总结前言本文将使用OpenCV C++ 制作哈哈镜图像。其实原理很简单,就是让图像像素扭曲,将像素重新进行映射。假设输入图像宽w,高h。图像中心点坐标(cx,cy),图像任意像素点(x,y)到中心点距离 dx=(x-cx),dy=(y-cy),变换半径r。一、凸透镜制作凸透镜效果(将图像放大)。根据网上查找的变换公式: 图像放大:凸透镜 x = (dx / 2
2022-01-09 14:37:04
3292
2
原创 OpenCV C++案例实战十五《制作九宫格图像》
OpenCV C++案例实战十五《制作九宫格图像》前言一、九宫格图像二、源码三、效果显示总结前言本文将使用OpenCV C++ 制作九宫格图像。其实原理很简单,就是将一张图像均等分成九份。然后将这九个小块按一定间隔(九宫格效果)拷贝到新画布上就可以啦。一、九宫格图像原图如图所示。本案例的需求是希望将图像均等分成九份,制作九宫格图像。首先得将原图均等分成九份。如图所示。将原图均等分成九份,然后将这每一个小方块按照一定的间隔(九宫格效果)拷贝到新图像就可以了。具体算法思想请看源码注释。二、源码
2022-01-08 19:27:29
3065
1
原创 OpenCV C++案例实战十四《图像修复》
OpenCV C++案例实战十四《图像修复》前言一、OpenCV inpaint二、源码三、效果显示总结前言本文将使用OpenCV C++ 对有瑕疵的图像进行修复。OpenCV 提供了inpaint API可进行图像修复。一、OpenCV inpaint原图如图所示。本案例的需求是希望能够将图像上的红线给消除。OpenCV 提供的inpaint API能够实现这个效果。void inpaint(InputArray src, 原图InputArray inpaintMask, 二进制
2022-01-08 19:04:25
5914
3
原创 OpenCV C++案例实战十三《人脸打马赛克》
OpenCV C++案例实战十三《人脸打马赛克》前言一、人脸检测二、马赛克效果三、效果显示四、源码总结前言本文将使用OpenCV C++ 对人脸部位打上马赛克。实现步骤其实很简单。1、人脸检测。2、图像像素修改一、人脸检测原图如图所示。本案例的需求是将人脸部位打上马赛克。所以,第一步我们首先需要检测出人脸的位置。OpenCV提供harr级联检测器检测人脸。 //人脸检测配置文件 string harr_file = "haarcascade_frontalface_default.xm
2022-01-07 19:20:23
4103
1
原创 OpenCV C++案例实战十二《图像全景拼接》
OpenCV C++案例实战十二《图像全景拼接》前言一、OpenCV Stitcher1.功能源码2.效果二、图像全景拼接1.特征检测2.计算单应性矩阵3.透视变换4.图像拼接5.功能源码6.效果三、源码总结前言本文将使用OpenCV C++ 进行图像全景拼接。目前使用OpenCV对两幅图像进行拼接大致可以分为两类。一、使用OpenCV内置API Stitcher 进行拼接。二、使用特征检测算法匹配两幅图中相似的点、计算变换矩阵、最后对其进行透视变换就可以了。一、OpenCV Stitcher
2022-01-02 12:14:01
15056
40
原创 OpenCV C++案例实战十一《基于背景减除---行人计数》
OpenCV C++案例实战十一《基于背景减除---行人计数》前言一、图像预处理二、对象计数1.轮廓提取2.效果显示三、源码总结前言本文将使用OpenCV C++ 对视频中的人流量进行统计。一、图像预处理原图如图所示。本案例的需求是想要统计画面中的人流量。画面中走动的行人可以看作是前景,那么我们就需要将前景、背景分割出来。我们可以使用OpenCV提供的BackgroundSubtractorMOG2 高斯混合模型,将行人从画面中分割出来,然后提取轮廓就可以统计人流量了。Ptr<Backg
2022-01-01 16:56:56
4580
原创 OpenCV C++案例实战十《车牌号识别》
OpenCV C++案例实战十《车牌号识别》前言一、车牌检测1.1.图像预处理1.2.轮廓提取1.3.功能效果1.4.功能源码二、字符切割2.1.图像预处理2.2.轮廓提取2.3.功能效果2.4.功能源码三、字符识别3.1.读取文件3.2.字符匹配3.3.功能源码四、效果显示五、源码总结前言本文将使用OpenCV C++ 进行车牌号识别。一、车牌检测原图如图所示。本案例的需求是进行车牌号码识别。所以,首先我们得定位车牌所在的位置,然后将车牌切割出来。接下来我们就来看看是如何实现。1.1.图像预
2021-12-19 11:30:33
35546
284
原创 OpenCV C++案例实战九《对象计数》
OpenCV C++案例实战九《对象计数》前言一、图像预处理1.灰度、阈值2.腐蚀3.距离变换4.自适应阈值5.膨胀二、轮廓查找三、效果显示四、源码总结前言本文将使用OpenCV C++ 进行对象计算。一、图像预处理原图如图所示。本案例想做的是统计图像中有多少个物体。简单来说就是通过统计有效轮廓来计数。本案例其实最重要的是如何进行图像预处理,如何才能够将这些轮廓有效区分开。所以,具体图像要设定一个符合特定需求的算法。接下来,我将一一演示如何一步步进行操作的。1.灰度、阈值首先进行图像灰度化,
2021-12-18 11:36:19
6477
10
原创 OpenCV C++案例实战八《基于Hu矩轮廓匹配》
OpenCV C++案例实战八《基于Hu矩轮廓匹配》前言一、查找轮廓二、计算Hu矩三、显示效果四、源码总结前言本文将使用OpenCV C++ 基于Hu矩进行轮廓匹配。一、查找轮廓原图测试图vector<vector<Point>>findContour(Mat Image){ Mat gray; cvtColor(Image, gray, COLOR_BGR2GRAY); Mat thresh; threshold(gray, thresh, 0, 25
2021-12-18 10:16:39
6312
15
原创 OpenCV C++案例实战七《生成蒙太奇图像》续
本文将使用OpenCV C++ 在案例实战二的基础上,编写新算法生成蒙太奇图像。本文使用OpenCV C++生成蒙太奇图像,关键步骤有以下几点。1、基于直方图比较:找到与待填充区域(ROI)最相似的图片进行填充。2、基于MSE比较:找到与待填充区域(ROI)最相似的图片进行填充。对比以上两种方法,从效果上看,个人觉得使用MSE方法比较两幅图相似效果会更好。
2021-12-12 11:48:53
3530
2
原创 OpenCV C++案例实战六《绿幕视频背景替换》
OpenCV C++案例实战六《绿幕视频背景替换》前言一、图像预处理二、HSV色彩空间转换1. cvtColor色彩空间转换2. inRange抠图三、背景替换四、源码总结前言本文将使用OpenCV C++ 进行绿幕视频背景替换。一、图像预处理背景绿幕视频首先,我们需要使用resize API将背景图尺寸修改与视频尺寸大小。这样才能进行后续的像素赋值操作。 Mat bg = imread("background.jpg"); //背景图 VideoCapture capture;
2021-12-11 11:44:24
5030
2
原创 OpenCV C++案例实战五《答题卡识别》
OpenCV C++案例实战五《答题卡识别》前言一、图像矫正1.源码二、获取选项区域1.扣出每题选项2.源码三、获取答案1.思路2.辅助函数3.源码4.效果总结前言本文将使用OpenCV C++ 进行答题卡识别。一、图像矫正原图如图所示。我们拿到图像首先要进行图像预处理。本文目的是进行答题卡选项识别。所以,第一步我们需要将答题卡区域切割出来以进行后续识别工作。在上一篇文章我已经做过图像矫正案例OpenCV C++案例实战四《图像透视矫正》,详细内容大家可以参考,这里就不再赘述。1.源码voi
2021-11-13 11:26:20
8920
33
原创 OpenCV C++案例实战四《图像透视矫正》
OpenCV C++案例实战四《图像透视矫正》前言一、图像预处理二、轮廓提取1.提取最外轮廓2.提取矩形四个角点3.将矩形角点排序三、透视矫正四、源码总结前言本文将使用OpenCV C++ 进行图像透视矫正。一、图像预处理原图如图所示。首先进行图像预处理。将图像进行灰度、滤波、二值化、形态学等操作,目的是为了下面的轮廓提取。在这里我还使用了形态学开、闭操作,目的是使整个二值图像连在一起。大家在做图像预处理时,可以根据图像特征自行处理。 Mat gray; cvtColor(src, gray
2021-11-07 11:50:19
7473
2
原创 OpenCV C++案例实战三《二维码检测》
OpenCV C++案例实战三《二维码检测》前言一、二维码检测二、二维码识别1.通过findContours找到轮廓层级关系三、二维码绘制总结前言本文将使用OpenCV C++ 进行二维码检测。一、二维码检测首先我们要先将图像进行预处理,通过灰度、滤波、二值化等操作提取出图像轮廓。在这里我还添加了形态学操作,消除噪点,有效将矩形区域连接起来。 Mat gray; cvtColor(src, gray, COLOR_BGR2GRAY); Mat blur; GaussianBlur(gr
2021-11-04 09:41:58
9662
15
OpenCV C++案例实战《银行卡号识别》
2023-04-29
OpenCV C++案例实战《答题卡识别》
2023-04-29
OpenCV C++案例实战《二维码检测》
2023-04-29
OpenCV C++案例实战《车道检测》
2023-04-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人