C++
文章平均质量分 78
fengqiao1999
这个作者很懒,什么都没留下…
展开
-
opencv 视频处理
OpenCV 的视频模块是其核心组成部分之一,主要负责视频文件的读取、处理、分析以及视频流的捕获和输出。这一模块使得开发者能够轻松地处理来自摄像头、文件或其他视频源的视频数据,进行实时或离线的图像处理和计算机视觉任务。原创 2024-06-19 16:36:22 · 969 阅读 · 0 评论 -
opencv进阶 ——(十二)基于三角剖分实现人脸对齐
三角剖分(Triangulation)是一种将多边形或曲面分解为一系列互不相交的三角形的技术,它是计算几何、计算机图形学、地理信息系统、工程和科学计算中的一个基本概念。通过三角剖分,复杂的形状可以被简化为基本的三角形元素,这些元素更容易处理和分析。在二维空间中,一个简单的三角剖分将一个多边形划分为若干个不相交的三角形,这些三角形的边要么是多边形的边,要么是连接多边形内部点的边。在三维空间中,三角剖分通常应用于表面建模,将一个曲面分割成一系列互不相交的三角面片。原创 2024-06-06 19:21:24 · 1062 阅读 · 0 评论 -
opencv进阶 ——(十一)基于RMBG实现生活照生成寸照
1、检测人脸,可以使用opencv自带的级联分类器或者dlib实现人脸检测。4、生成尺寸相同的纯色背景与当前人像进行ALPHA融合即可。2、放大人脸范围,调整到正常寸照尺寸。3、基于RMGB算法得到人像掩码。原创 2024-06-05 16:08:29 · 583 阅读 · 0 评论 -
opencv进阶 ——(十)图像处理之基于dlib人脸检测与识别
Dlib是一个功能丰富的C++库,设计用于构建复杂的软件系统,尤其在机器学习、计算机视觉和数值计算等领域有着广泛的应用。原创 2024-06-05 15:59:39 · 1137 阅读 · 2 评论 -
opencv进阶 ——(九)图像处理之人脸修复祛马赛克算法CodeFormer
CodeFormer是一种基于深度学习的人脸复原模型,由南洋理工大学和商汤科技联合研究中心联合开发,它能够接收模糊或马赛克图像作为输入,并生成更清晰的原始图像。原创 2024-06-01 20:58:05 · 1712 阅读 · 0 评论 -
opencv进阶 ——(八)图像处理之RMBG模型AI抠图
BRIA.AI团队于HuggingFace开源了一个基于ISNet背景移除模型RMBG-1.4,它可以有效对前景与背景进行分离。RMBG-1.4在精心构建的数据集上训练而来,该数据包含常规图像、电商、游戏以及广告内容,该方案达到了商业级性能,但仅限于非商业用途。关于所用到的训练数据:12000+高质量&高分辨率像素级精度手工标注。更详细的数据分布介绍请移步[RMBG-1.4]原创 2024-05-31 12:03:17 · 862 阅读 · 0 评论 -
opencv进阶 ——(七)图像处理之寸照换背景
寸照换背景,通常指的是将个人证件照片的背景色更换为另一种颜色,如白色、蓝色或红色等,以满足不同用途的要求。例如,护照照片通常要求白色背景,而身份证照片可能需要蓝色背景。这个过程通常涉及到图像处理技术,尤其是图像分割和合成技术。原创 2024-05-29 22:50:18 · 1142 阅读 · 1 评论 -
opencv进阶 ——(六)图像处理之图像增强
图像增强算法的目的是改善图像的视觉质量,使其更易于分析或增强特定特征。这些方法可以单独使用,也可以组合使用,以根据特定应用场景定制增强效果。在实际应用中,通常需要根据图像的内容和目标应用选择合适的增强策略。原创 2024-05-29 16:22:17 · 2420 阅读 · 0 评论 -
opencv进阶 ——(五)图像处理之马赛克
二、直接使用resize,先缩小、后放大,以此产生马赛克效果。一、遍历图像并对每个马赛克区域进行像素化处理。原创 2024-05-26 10:13:06 · 567 阅读 · 0 评论 -
opencv进阶 ——(四)图像处理之去高光
4、通过illuminationChange函数对高光区域消除高光。3、进行膨胀操作,放大高光区域,以此得到高光蒙版。2、二值化图像,得到高光区域。原创 2024-05-26 10:11:40 · 655 阅读 · 0 评论 -
opencv进阶 ——(三)图像处理之怀旧滤镜
一、将图像转换成灰度图,然后通过applyColorMap进行上色,再与原图进行融合,生成怀旧效果。二、对颜色通道进行变换得到怀旧效果。原创 2024-05-22 17:31:03 · 216 阅读 · 0 评论 -
opencv进阶 ——(二)图像处理之毛玻璃效果
四、将高斯模糊后的图像减去噪音点图像,然后对应原图的相应图像相见,参数叠加效果。一、通过用像素点邻域内随机一个像素点的颜色替代当前像素点的颜色实现。三、使用boxFilter将噪音点拉长,从而产生横纹或竖纹效果。六、将图像打乱,然后随机抽取部分点,替换到高斯模糊后的图像中。二、通过高斯模糊后,与原图对比生成噪音点叠加实现。五、直接用高斯模糊叠加噪音点实现。原创 2024-05-22 17:30:12 · 441 阅读 · 1 评论 -
opencv进阶 ——(一)图像处理之浮雕
浮雕就是把所要呈现的图像突起于石头表面,根据凹凸的程度不同从而形成三维的立体感。计算机产生浮雕效果原理与之类似,即通过勾画图像的轮廓,并且降低周围的值,从而产生一张具有立体感的浮雕效果图片。这里我们通过相邻元素相减的方法得到轮廓与边缘的差,从而获得凹凸的立体感觉。图像浮雕效果的原理是利用图像中像素之间的灰度差异来模拟立体感。通常情况下,图像中相邻像素的灰度值会有微小的差异,浮雕效果利用这些差异来产生阴影和凸起的立体感。原创 2024-05-19 11:43:37 · 585 阅读 · 0 评论 -
opencv基础篇 ——(十八)级联分类器CascadeClassifier
是 OpenCV 库中的一个关键组件,主要用于对象检测,特别是面部检测和其他特征点的检测。这个类实现了一种基于级联分类器的算法,该算法最初由 Paul Viola 和 Michael Jones 在他们的论文《Rapid Object Detection using a Boosted Cascade of Simple Features》中提出。以下是empty()read(node)原创 2024-05-19 11:03:40 · 2839 阅读 · 2 评论 -
opencv基础篇 ——(十七)霍夫变换
霍夫变换(Hough Transform)是一种在图像处理和计算机视觉领域广泛使用的特征检测技术,主要用于检测图像中的直线、曲线等几何形状。它的基本思想是通过将图像中的每个像素点映射到一个参数空间中,以检测特定形状的参数集,例如,对于直线,这些参数通常是斜率和截距。在参数空间中,来自相同形状的像素点会形成一个高峰,从而可以通过检测这些峰来确定形状的存在和位置。:通常在霍夫变换之前,先对图像进行边缘检测,如Canny算法,以减少后续处理的数据量。:对于直线检测,参数空间是基于两个参数,通常是距离(ρ。原创 2024-05-17 11:59:04 · 771 阅读 · 0 评论 -
opencv基础篇 ——(十六)图形绘制与填充
OpenCV 提供了丰富的图形绘制和填充功能,主要通过cv::circlecv::line和等函数实现。原创 2024-05-06 22:23:24 · 696 阅读 · 0 评论 -
opencv基础篇 ——(十五)多边形与凸边型
在计算机视觉和图像处理中,多边形和凸多边形是常用的几何形状描述方式。它们在描述对象的形状、边界或区域时非常有用。下面我将简要介绍它们的概念和特点:多边形(Polygon)定义: 多边形是一个平面内的闭合图形,由一系列连续的直线段连接而成,首尾相接,且不相交。特点:示例: 三角形、正方形、五边形等。凸多边形(Convex Polygon):定义: 凸多边形是一种特殊的多边形,其中任意两个顶点之间的连线都位于或在多边形内部。换句话说,凸多边形内部的任意一点都可以通过直线连接到多边形内的任意其他两点。特点:原创 2024-05-06 13:47:00 · 1426 阅读 · 1 评论 -
opencv基础篇 ——(十四)轮廓拟合
轮廓拟合是指通过数学模型(如直线、圆、椭圆或多边形)来逼近或描述轮廓的形状。这一过程有助于简化复杂轮廓,提取其关键特征,或用于进一步的分析和识别。fitLine轮廓拟合在实际应用中非常广泛,比如在物体识别、形状分类、尺寸测量等方面。通过选择合适的拟合方法,可以有效地提取和利用图像中的形状信息。用于轮廓点集的多边形逼近的函数。它用于减少轮廓点的数量,同时保持轮廓的形状近似不变。原创 2024-05-04 09:47:30 · 2792 阅读 · 1 评论 -
opencv基础篇 ——(十三)计算轮廓信息
计算轮廓信息时,有一些辅助函数可以帮助你处理和分析轮廓。:计算轮廓的面积。:计算轮廓的周长。:计算轮廓的边界框。() : 图像矩计算() 不变矩计算用于计算轮廓所围成的区域面积的功能。contourInputArraycv::Matorientedboolfalsetruefalse函数返回一个double类型的值,表示轮廓所围成的区域面积。如果轮廓自相交,这个值可能并不精确,因为使用的是简单的格林公式计算面积,对于复杂轮廓可能无法正确处理自交部分。用于计算曲线或轮廓周长的工具。curve。原创 2024-05-04 08:29:13 · 1191 阅读 · 0 评论 -
opencv基础篇 ——(十二)轮廓提取与绘制
cv::findContours 是 OpenCV 中用于在图像中查找轮廓的函数之一。它可以帮助你找到图像中所有的轮廓,并且可以选择性地进行轮廓的过滤和处理。主要用于在二值图像中查找对象的边界轮廓。这些轮廓通常是对象之间的分界线,可以通过它们进行形状分析、对象检测等操作。image: 输入图像,必须是单通道的二值图像,即像素值为0或255(或0或1)contours: 输出轮廓的容器。函数会将检测到的轮廓信息存储在这个数据结构中。原创 2024-05-01 19:21:34 · 2020 阅读 · 0 评论 -
opencv基础篇 ——(十一)常用照片处理函数
用于改善光照条件不佳导致的图像对比度低下或局部过暗/过亮的问题。该函数通过模拟全局和局部光照变化,旨在提高图像的整体视觉质量,特别是在低光照条件下,使得图像中的重要细节更加清晰可见。src: 输入图像,通常为cv::Mat类型,表示待处理的灰度图像或彩色图像(BGR 或 RGB 格式)。如果输入的是彩色图像,内部会先将其转换为灰度图像进行处理。dst: 输出图像,与输入图像src同样大小和类型。该图像存储经过光照变化增强后的结果。alpha: 全局光照调整因子。它控制整体图像亮度的增益。取值范围通常为。原创 2024-04-30 21:46:40 · 1183 阅读 · 2 评论 -
opencv基础篇 ——(十)非真实感渲染
非真实感渲染(Non-Photorealistic Rendering, NPR)是指通过一系列图像处理技术,将真实感图像转换为具有特定艺术风格或视觉效果的图像,模拟绘画、素描、卡通等非现实主义表现手法。OpenCV 提供了一些内置函数来实现非真实感渲染,这些函数可以帮助开发者快速实现各种艺术风格化效果。除了上述直接相关的非真实感渲染函数外,OpenCV 还提供了众多基础图像处理功能,如滤波、形态学操作、色彩空间转换、直方图均衡化等,这些都可以作为非真实感渲染算法的组成部分或辅助手段。原创 2024-04-30 21:45:33 · 812 阅读 · 0 评论 -
opencv基础篇 ——(九)图像几何变换
transpose图像几何变换是通过对图像的几何结构进行变换来改变图像的形状、大小、方向或者透视关系。常见的图像几何变换包括缩放、旋转、平移、仿射变换和透视变换等。transpose对于图像来说,它可以将图像的行和列进行交换。转置后图像的高度和宽度也将互换。它可以沿水平、垂直或两个方向同时对图像进行翻转。缩放是改变图像尺寸大小的一种变换操作。可以按比例缩小或放大图像。在 OpenCV 中,可以使用cv::resize函数实现图像的缩放操作。旋转是围绕图像的中心点或指定点进行角度旋转的操作。原创 2024-04-27 16:48:45 · 1205 阅读 · 1 评论 -
opencv基础篇 ——(八)图像平滑滤波
常用图像平滑滤波原创 2024-04-26 10:01:26 · 1279 阅读 · 0 评论 -
opencv基础篇 ——(六)图像形态学
图像形态学原创 2024-04-23 12:07:12 · 1376 阅读 · 0 评论 -
opencv基础篇 ——(五)颜色通道
若要以各自对应的颜色(如红色、绿色通道显示为红色、绿色)显示这些单通道图像,需要通过特定方式(如 OpenCV 的 cv::applyColorMap 函数)添加伪彩色,或者使用 cv::merge 合并回多通道格式后再显示。这个图像将包含所有输入单通道图像的数据,按照提供的顺序组合成对应的通道。:在进行色彩空间转换时,先使用 cv::split 分离原图像的通道,对各通道进行特定计算(如 BGR 到 HSV 的转换),然后使用 cv::merge 合并新计算出的通道,形成目标色彩空间的图像。原创 2024-04-23 11:44:02 · 1264 阅读 · 0 评论 -
opencv基础篇 ——(四)cv::Mat 常用功能介绍
cv::Mat是 OpenCV 库中用于表示图像和多维数组的核心数据结构。它是 OpenCV 中进行图像处理、计算机视觉算法操作的基础。以下是对cv::Matcv::Mat支持的数据类型涵盖 OpenCV 定义的各种基本类型,如CV_8U(无符号 8 位整型)、CV_16S(带符号 16 位整型)、CV_32F(32 位浮点型)等,以及它们的多通道组合(如CV_8UC3表示 3 个 8 位无符号整型通道)。原创 2024-04-22 11:35:36 · 3580 阅读 · 0 评论 -
opencv基础篇 ——(三)图像二值化
图像二值化是图像处理中常用的一种技术,用于将灰度图像转换为只包含两个像素值(通常是黑色和白色)的二值图像。这种处理通常用于简化图像、减少数据量以及强调感兴趣的目标。原创 2024-04-22 11:32:18 · 4130 阅读 · 0 评论 -
opencv基础篇 ——(二)颜色空间转换
颜色空间是描述图像中颜色的数学模型。不同的颜色空间使用不同的方式来表示颜色,每种颜色空间都有其特定的优点和用途。RGB 是最常见的颜色空间之一,它使用红色(Red)、绿色(Green)、蓝色(Blue)三个颜色通道来描述一个颜色。在 RGB 空间中,每个像素由这三个通道的强度值组成,通常范围在 0 到 255 之间。RGB 颜色空间适用于大多数彩色显示设备,如电脑显示器、数字相机等。BGR 是 RGB 的变种,其中颜色通道的顺序颠倒为蓝色(Blue)、绿色(Green)、红色(Red)。原创 2024-04-18 15:24:42 · 1445 阅读 · 0 评论 -
C++ 九阴真经之异步队列
异步队列可以看作是消息队列和线程池的合体,输入端是用户自定义数据,输出端为用户自定义执行体。定义类型T定义执行体bool task(T& t){}就可以实现没每一个消息执行操作task(t)/************************************************************************************* 异步队列* 用户将数据压入队列,并自定义执行函数,对数据...原创 2020-06-30 21:27:39 · 1420 阅读 · 0 评论 -
C++ 九阴真经之线程池
线程池的作用: 1、避免了在处理短时间任务时创建与销毁线程的代价; 2、在大批量并发任务中,可以更合理的使用系统资源,进行削峰平谷,保证系统运行的稳定性;基于C++11标准构建线程池,具有以下优势; 1、任务无需继承接口 2、支持lambada表达式 3、支持全局函数、静态成员函数; 4、使用bind支持成员函数;class ThreadObject : public QueueObject{public: usin...原创 2020-06-30 21:24:50 · 338 阅读 · 0 评论 -
C++ 九阴真经之线程间通信(消息队列)
消息队列是线程间通信比较常用得方式,常用于解决经典模型生产者——消费者模型线程间得通信。本文将结束基于C++标准库实现得消息队列,可以支持任意参数类型,任务参数数量。为了方便后续线程池、异步队列得实现,这里提取了公共基类。class QueueObject : public noncopyable{public: QueueObject() :m_bStop(false), m_nCapacity(MAX_QUEUE_CAPACITY) { } virtual ~QueueO原创 2020-06-30 21:23:03 · 2946 阅读 · 0 评论 -
C++ 支持宏重载效果
C++宏默认是不支持重载的,但可以通过特殊方法让宏支持重载。可能你要问,支持宏重载有什么用处,那么,就以实例来尝试宏的重载。为了要实现类的动态创建,我还想构建类的继承关系图,为了简化注册,所以我需要用宏来简化注册。我需要以下宏来支持:REG_CREATE1(className)REG_CREATE2(className, baseName1)REG_CREATE3(className, baseName1, baseName2)C++支持多继承,但为了方便,我不希望每次注册的时.原创 2020-06-14 11:51:29 · 2318 阅读 · 1 评论 -
C++ 不定参宏展开
一、通过不定参宏进行日志输出#define LOGINFO(fmt,...) printf("[%s][%s]", __FUNCTION__, GETINFO(fmt, __VA_ARGS__)) 通过参数 __VA_ARGS__ 来展开不定参数, 这里借助宏可以输出日志的位置等信息。 这里不定参的输入如果为空,linux下可能无法编译通过,你需要加 ###define LOGINFO(fmt,...) printf("[%s][%s]", __FUNCTION__, GET...原创 2020-06-14 11:49:15 · 1026 阅读 · 0 评论 -
C++ 基础类型万能转换器
你可能还在使用atoi、atof、itoa等函数进行类型转换,赶紧看过来,用一个函数,解决所有支持io流类型的转换。//基础类型转换template<typename OUT,typename IN, typename std::enable_if<!std::is_same<OUT, IN>::value, int>::type N = 0>OUT Convert(const IN& val){ std::stringstream ss; ss原创 2020-06-14 11:47:00 · 406 阅读 · 0 评论 -
C++ 九阴真经之命令控制模式
所谓命令控制模式,就是对应的行为进行封装,通过命令就能控制,你可以理解为linux下指令操作。 比如一个操作包括,A1、A2、.....A10这10步操作,如果某一步失败,那么就进行倒回,如果这10个操作的业务类型各不相同,并且所需要的参数也不尽相同,操作起来就比较困难,如果我能将他们全部封装成指令模式,只通过A1到A10这10个字符串就触发,那么实现起来就容易的多。 对于网络编程,命令控制就变得必不可少了,该模型可以帮你将网络层与业务层完美的管理在一起。 实...原创 2020-06-13 17:20:26 · 335 阅读 · 0 评论 -
C++ 九阴真经之控制反转 Ioc
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup) 实现代码:#include <sstream>#include <string>#include <unordered_map>#include <memory...原创 2020-06-13 17:17:29 · 524 阅读 · 0 评论 -
C++ 九阴真经之动态创建
动态创建对很多人来说,都不陌生,在一些大型项目中是比较常见的,也是MFC的核心机制,随着C++新标准的演化,很多东西都可以很简单的就实现。实现代码:#include <vector>#include <functional>#include "noncopyable.h"#include "singleton.h"#include "anyval.h"#define PRIVATE_REG_DYNCREATE_4(class_name, baseName1,原创 2020-06-08 20:49:04 · 176 阅读 · 0 评论 -
C++ 九阴真经之任意值
any是一个可用于任何类型单个值的类型安全的容器,目前已收录到C++17标准库,但对于一些历史 项目,可能并没有使用最新编译器,那么可以自己简单的实现。代码实现:#include <assert.h>#include <typeinfo>#include <string>class AnyVar{public: //保存真正数据的接口类 class placeholder { public: virtual ~placeholder原创 2020-06-08 20:46:32 · 196 阅读 · 0 评论 -
C++ 九阴真经之线程安全单例类
C++ 九阴真经之线程安全单例类与之前的单例类似,但普通的单例类是非线程安全的,就是是你不能有些线程读,有些线程写,一般来说,要安全访问单例,就需要用户自己加载来控制对单例的访问。日常开发中经常会需要加载配置数据,我希望程序运行过程中能够定时的去更新这些配置信息,比如log级别,一般情况下开启INFO级别即可,但处理问题时,我希望打印DEBUG Log。为了方便起见,这里实现一个线程安全单例,以便以后的项目能够快速的处理这种场景。代码实现://哨兵类,负责多线程操作,自动加锁解锁//原创 2020-06-08 16:15:05 · 193 阅读 · 0 评论