
C++
文章平均质量分 85
Dwyane05
严肃认真,活波可爱。
展开
-
Linux多线程C++工具库:liblmp_tool -- 线程池类ThreadPool
Linux多线程编程工具库liblmp_tool github:https://github.com/Dwyane05/liblmp_tool使用条件变量和互斥锁实现线程池:头文件:/** Use of this source code is governed by a BSD-style license* that can be found in the Li...原创 2019-05-31 16:39:36 · 385 阅读 · 1 评论 -
OpenCV 运动模糊的模拟 C++
运动模糊时,模糊后图片某点的值应该与原图沿运动角度方向前面的点有关,并且越近邻影响越大,即权值越大。所以除了确定卷积核之外,还确定了锚点(anchor)右下角60度移动,距离50代码实现:#include "opencv2/opencv.hpp"typedef cv::Mat Mat;void genaratePsf(Mat &psf, cv::Point ...原创 2019-03-26 11:49:30 · 2636 阅读 · 1 评论 -
OpenCV 陷波滤波器消除周期性噪音 C++
观察下面图像:有明显的近似水平线的噪音模式,我们希望他在频率域内的成分沿垂直轴集中;下图是该图像的谱;将垂直轴的分量去掉,构建的陷波器如下:原图与结果图对比:滤掉的空间噪音模式:代码实现:#include "opencv2/opencv.hpp"typedef cv::Mat Mat;Mat image_add_border( Mat ...原创 2019-03-22 10:31:33 · 5431 阅读 · 1 评论 -
OpenCV 彩色图像的自适应中值滤波 C++
前面讲过中值滤波,只要脉冲噪声的空间密度不大,性能就会很好(根据经验Pa和Pb小于0.2)。见https://blog.youkuaiyun.com/cyf15238622067/article/details/87854437下面证明 自适应中值滤波可处理更大概率(密度)的脉冲噪音;自适应中值滤波的另一个优点是平滑非脉冲噪声时试图保留细节,这是传统中指滤波所做不到的。自适应中值滤波也工作在Sx...原创 2019-03-22 09:02:00 · 3956 阅读 · 1 评论 -
OpenCV使用陷波滤波器减少摩尔波纹 C++
陷波滤波器是更有用的选择性滤波器。陷波滤波器拒绝事先定义的关于矩形中心的一个邻域的频率。零相移滤波器必须是关于原点对称的,因此一个中心位于(u0,v0)的陷波在位置(-u0,-v0)必须有一个对应的陷波。陷波带阻滤波器可以用中心已被平移到陷波滤波器中心的高通滤波器的乘积来构造。一般形式为: ...原创 2019-03-18 15:21:50 · 9554 阅读 · 5 评论 -
OpenCV 频率域实现钝化模板、高提升滤波和高频强调滤波 C++
为什么要进行高频提升和高频加强?高频滤波后的图像,其背景平均强度 减小到接近黑色(因为高通滤波器滤除 了傅里叶变换的零频率成分: F(0,0)=f(x,y)=0)解决办法:把原始图像加到过滤后的 结果,如拉普拉斯算子增强,这种处理 称为高频提升过滤钝化模板(锐化或高通图像):从一幅图像减去 其自身模糊图像而生成的锐化图像构成。在频率 域,即从图像本身减去低通滤波(模糊)后的图 像...原创 2019-03-13 11:33:51 · 4387 阅读 · 2 评论 -
OpenCV 彩色图像的直方图均衡化、平滑和锐化 C++
前面已经介绍过灰度图像的平滑和锐化,下面使用均值平滑和拉普拉斯锐化处理彩色图像。平滑结果:平滑差异和锐化结果代码实现:#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"using namespace cv;int main() { Mat src ...原创 2019-03-21 14:03:38 · 5252 阅读 · 1 评论 -
OpenCV 任意曲线(S型等)调整图像色调,对比度小工具 C++
色调变换改善图像色调的变换通常交互的选择。其概念是实验性的调整图像的亮度和对比度,以便在合适的灰度范围提供最多的细节。彩色本身并不改变。在RGB和CMYK空间中,这意味着使用相同的变换函数映射3个(或4个)彩色分量。在HSI中则改进了亮度分量;下面显示了3个常见的色调不平衡的几个典型变换----平淡的,较亮的,较暗的图像。S型曲线可以增强对比度,凹凸曲线分别减小、增加亮度。下图...原创 2019-03-21 10:48:40 · 5168 阅读 · 1 评论 -
OpenCV 频率域的拉普拉斯算子 C++
我们已使用拉普拉斯算子对空间域图像进行了增强。现在在空间域实现它,并证明空间域和频率域技术是等效的。拉普拉斯算子在频率域的实现:或者关于频率域的中心,使用如下滤波器实现:D(u,v)是距离函数。然后拉普拉斯图像由下式得到:F(u,v)是f(x,y)的傅里叶变换。增强可用下式这里c = -1, 因为H(u,v)是负的。将图像都标定到0-1使用教材图...原创 2019-03-12 17:25:25 · 2997 阅读 · 1 评论 -
OpenCV 同态滤波 高斯高通 C++
概述https://blog.youkuaiyun.com/cyf15238622067/article/details/86657370文中介绍的入射分量和反射分量模型,可开发一种频域处理过程,通过压缩灰度范围和增强对比度来改善一幅图像的外观。频谱域同态滤波图像可以表示为照度和反射率的乘积:f(x,y) =i(x,y)r(x,y)现在定义:则有:或式...原创 2019-03-12 16:42:34 · 5201 阅读 · 5 评论 -
OpenCV 颜色空间RGB 到HSI CMYK的转换 C++
从RGB 到HSI 的空间转换给定一幅RGB彩色格式的图像,每个RGB像素的H分量可用下式得到:其中等于饱和度分量由下式给出:强度分量下式得出:上式已假定RGB归一化到【0-1】,且角度是根据HSI空间的红轴来度量。色调可以用6.2-2的结果除以360度归一化到[0-1];如果RGB已经归一化到[0-1],那其他两个分量已经归一化到0-1了。...原创 2019-03-20 10:58:22 · 3625 阅读 · 1 评论 -
OpenCV 改变图片颜色 C++
将RGB颜色空间转换到Lab,修改一幅图像的颜色;/** color_transfer.cpp** Created on: May 21, 2018* Author: cui*/#include <opencv2/opencv.hpp>#include <opencv2/imgproc.hpp>using namespac...原创 2019-03-19 15:59:19 · 4801 阅读 · 1 评论 -
盲目去卷积和盲目去模糊的例子
盲目去卷积和盲目去模糊,就是计算psf或滤波器核;稍微有点效果部分代码:#include "common.h"#include "ImageDeblur.h"#include "helper.h"int main(int argc, char *argv[]){ std::string filename = argv[1]; cv::Mat img ...原创 2019-04-04 11:02:09 · 1892 阅读 · 1 评论 -
OpenCV 带参数的维纳滤波 C++
下图是OpenCV 自带例子的修改版本。结果:代码实现:#include <iostream>#include "opencv2/imgproc.hpp"#include "opencv2/imgcodecs.hpp"#include <opencv2/opencv.hpp>using namespace cv;using namespa...原创 2019-03-27 10:16:46 · 8533 阅读 · 3 评论 -
OpenCV 对比度受限的自适应直方图均衡化(CLAHE) C++实现
直方图均衡化(HE)是一种很常用的直方图类方法,基本思想是通过图像的灰度分布直方图确定一条映射曲线,用来对图像进行灰度变换,以达到提高图像对比度的目的。该映射曲线其实就是图像的累计分布直方图(CDF)(严格来说是呈正比例关系)。然而HE是对图像全局进行调整的方法,不能有效地提高局部对比度,而且某些场合效果会非常差。对比度受限的自适应直方图均衡(CLAHE,Contrast Limited Ada...原创 2019-04-11 09:14:48 · 14068 阅读 · 4 评论 -
Linux多线程C++工具库:liblmp_tool -- 线程类Thread
Linux多线程编程工具库liblmp_tool github:https://github.com/Dwyane05/liblmp_toolThread 类封装了原始 pthread_create等操作函数;内含同步工具和原子锁头文件:/** Use of this source code is governed by a BSD-style license*...原创 2019-05-31 16:05:17 · 311 阅读 · 1 评论 -
Linux多线程C++工具库:liblmp_tool -- 同步工具CountDownLatch
Linux多线程编程工具库liblmp_tool github:https://github.com/Dwyane05/liblmp_toolCountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后执行。CountDownLatch原理CountDownLat...原创 2019-05-31 15:52:21 · 273 阅读 · 1 评论 -
Linux多线程C++工具库:liblmp_tool -- 条件变量Condition
Linux多线程编程工具库liblmp_tool github:https://github.com/Dwyane05/liblmp_tool使用RAII手法封装MutexLock& mutex_;pthread_cond_t pcond_;实现条件变量和互斥锁的使用;头文件:/** Use of this source code is gove...原创 2019-05-31 15:46:37 · 276 阅读 · 1 评论 -
Linux多线程C++工具库:liblmp_tool -- RAII手法封装互斥锁MutexLock
Linux多线程编程工具库liblmp_tool github:https://github.com/Dwyane05/liblmp_tool互斥锁(mutex)恐怕是使用得最多的同步原语,粗略地说,它保护了临界区,任何一个时刻最多只能有一个线程在此mutex划出的临界区内活动。单独使用mutex时,我们主要为了保护共享数据。个人的原则是:·用RAII手法封装mutex...原创 2019-05-31 15:40:02 · 314 阅读 · 1 评论 -
Linux多线程C++工具库:liblmp_tool --CurrentThread 类
CurrentThread 类 主要实现 获取当前线程的tid,并在类中保存,后续在ThreadPool中查询时,做一次判断即可。不用每次都查询tid.Linux多线程编程工具库liblmp_tool github:https://github.com/Dwyane05/liblmp_tool头文件实现:/** Use of this source code is gove...原创 2019-05-31 15:29:08 · 310 阅读 · 1 评论 -
Linux多线程C++工具库:liblmp_tool --TimeZone 时区类
实现了localtime 和 UTCtime的转换:Linux多线程编程工具库liblmp_tool github:https://github.com/Dwyane05/liblmp_toolTimezone类分析:头文件;定义了localtime和utctime 的转换;使用了shard_ptr 智能指针处理date/** Use of this source...原创 2019-05-31 15:06:44 · 420 阅读 · 1 评论 -
Linux多线程C++工具库:liblmp_tool -- Julian date 计算
维基百科 解释:https://en.wikipedia.org/wiki/Julian_day主要是天文学在用,在一个周期内以日计数计算。Linux多线程编程工具库liblmp_tool github:https://github.com/Dwyane05/liblmp_toolDate类分析:头文件:;/** Use of this source code...原创 2019-05-31 14:47:49 · 498 阅读 · 1 评论 -
Linux多线程C++工具库:liblmp_tool -- 原子操作
Linux内核提供了一系列基本的API操作,包括时间,文件,线程等;但直接使用费时费力,在学习了陈硕大神的muduo库后,发现其内部已经做好了一些封装,使用了一些技巧,包括RAII手法。该库的第一版本,先借鉴muduo_base的代码,后面再添加其他功能。欢迎starLinux多线程编程工具库github:https://github.com/Dwyane05/liblmp_tool...原创 2019-05-30 18:01:25 · 349 阅读 · 1 评论 -
【图像处理】一种低光照图像的亮度提升方法(Adaptive Local Tone Mapping Based on Retinex for High Dynamic Range Images)
前言 在实际的拍照过程中,常常会遇到,光线不足的情况。这时候单反用户一般会调大感光度,调大光圈,以让照片整体更清晰,更亮。那么如果照片已经被拍的很暗了,怎么办呢?这时候我们可以利用算法来提升图像整体的光照情况,让图像更清晰。 2013年这篇《Adaptive Local Tone Mapping Based on Retinex for High Dynamic Range Images...转载 2019-04-11 10:49:58 · 2826 阅读 · 1 评论 -
ACE(Automatic Color Enhancement),自动色彩增强算法
ACE(Automatic Color Enhancement),自动色彩增强算法,是一种对于彩色图像增强十分行之有效的方法。它的改进算法以及快速实现在文章Automatic Color Enhancement (ACE) and its Fast Implementation,2012中提出。 在NxN的图像上,ACE算法的算法复杂度为O(N^4),文章提出的新的ACE算法采取了两...原创 2019-04-11 10:42:33 · 6620 阅读 · 1 评论 -
OpenCV 局部自适应对比度增强ACE算法 C++
图像的对比度增强算法在很多场合都有着重要的应用,特别是在医学图像上,这是因为在众多疾病的诊断中,医学图像的视觉检查时很有必要的。而医学图像由于本身及成像条件的限制,图像的对比度很低。因此,在这个方面已经开展了很多的研究。这种增强算法一般都遵循一定的视觉原则。众所周知,人眼对高频信号(边缘处等)比较敏感。虽然细节信息往往是高频信号,但是他们时常嵌入在大量的低频背景信号中,从而使得其视觉可见性降...原创 2019-04-11 09:51:50 · 6851 阅读 · 1 评论 -
频率域滤波步骤小结
频率域滤波步骤小结1、给定一幅大小为M*N的输入图像f(x,y), 由P >= 2M-1,Q >= 2N-1;得到填充参数P,Q,典型的我们选择,P=2M,Q=2N;如果滤波的目的仅是粗糙的视觉分析,可以跳过此步骤;2、对f(x,y) 添加必要数量的0,形成大小为P*Q的图像 fp(x,y);3、用乘以fp(x,y)移到其变换中心;4、计算来自步骤3图像的DFT,...原创 2019-03-07 11:38:35 · 8149 阅读 · 1 评论 -
OpenCV C++频率域相角减半,幅值不变
在复数坐标系下,相角减半,幅值不变;画图如下:由倍角公式:令:则 所以 代码实现://将相角*0.5,幅值保持不变void half_angel(Mat &complex_r, Mat &complex_i, Mat &dst){ Mat temp[...原创 2019-03-07 10:23:15 · 271 阅读 · 1 评论 -
OpenCV C++使用高通滤波和阈值法增强指纹图像
《数字图像处理》冈萨雷斯 第三版中,P179有一个指纹增强的例子;先用opencv模拟实现:处理这个指纹图像 ,其污染是很明显的。自动指纹识别的关键一步是增强指纹的脊线并减小污染。使用高通滤波实现;脊线增强使用脊线包含高频这样一个事实来完成,而高通滤波不会改变高频;另一方面,滤掉了低频,而低频分量对应图像中慢变化的灰度,例如背景和污染。这样增强就可以同时减少高频外的所有特征来达到,...原创 2019-03-08 17:34:54 · 5092 阅读 · 1 评论 -
OpenCV 图像增强之伽马变换 C++
幂次变换又称伽马变换:✓ c和 γ是正常数✓ γ <1 提高灰度级,在正比函数上方,使图像变亮✓ γ >1 降低灰度级,在正比函数下方,使图像变暗创建滑动条改变Gama值• 例:人体胸上部脊椎骨折的核磁共振图像代码如下:/**伽马变换--s=cr^γ* 滑动条改变Gama值,γ<1时将较窄范围的暗色输入转换为...原创 2019-02-19 15:49:42 · 8868 阅读 · 1 评论 -
OpenCV图像增强之对数变换log C++
对数变换的通用形式为:对数函数的一般形状的任何曲线,都能完成图像灰度级的扩展/压缩;但幂律变换对于这个目的更为通用;代码实现:#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp&...原创 2019-02-19 15:15:55 · 7295 阅读 · 1 评论 -
OpenCV模糊集合实现图像增强 C++
模糊集合原理 在计算机编程的时候,常常会使用一种“干脆的”集合。在判断某件事,或者某个变量的时候,常常使用的是布尔值(因为某件事,不是真就是假)。通过一个阈值,去判断这件事,而这样的一个阈值的设定,会产生一个问题。下图 当一个人的年龄超过20岁,那么这个人就不再属于年轻人范畴。这样来说,未免有些...原创 2019-02-25 08:47:42 · 3014 阅读 · 1 评论 -
OpenCV图像增强之图像反转 C++
图像增强:增强处理是对图像进行加工,使其经过对于特定的应用比原始图形更适合的一种处理。特定一词是指面向特定问题的。例如,对于增强X射线图像非常有用的方法,可能并不是适用于增强红外线。图像增强是视觉上最具吸引力的图像处理领域之一;图像增强常用三类基本函数:线性函数(反转和恒等变换)、对数函数(对数和反对数变换)、幂律函数(n次幂和n次根变换)图像反转用于增强嵌入在一幅图像的暗区域中的白...原创 2019-02-19 15:05:17 · 2407 阅读 · 1 评论 -
OpenCV图像(相加)平均去除高斯噪音 C++
图像相加:图像平均的一种重要应用是在天文学领域,在该领域在非常低的照度下成像常常会导致传感器噪声;以至于单幅图像无法解析;多次高斯模糊求平均值可以消除图像在低照度下的噪音相加是连续积分的离散形式。也可以使用CCD或图像传感器的累积能力,通过长时间观察某一场景达到降噪的目的。冷却也常常用于降低传感器噪音;代码实现如下:#include <cstdlib>...原创 2019-02-19 14:54:15 · 4893 阅读 · 2 评论 -
OpenCV图像的线性操作,addWeighted实现两图像混合, C++
图像的线性操作很常见,例如两幅图像混合;非线性操作比如寻找最大值;OpenCV中addWeighted函数可以实现void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArraydst, int dtype=-1)第一个参数,InputA...原创 2019-02-19 14:38:08 · 1291 阅读 · 2 评论 -
OpenCV混合空间增强法 C++
前面图像处理主要使用单一增强法;为达到令人满意的效果,对于给定任务需要采用多种互补的图像增强技术。使用教材上的人体骨骼图片实验;目的是通过图像锐化突出骨骼的更多细节来增强图像。由于灰度图像的动态范围很窄并且有很高的噪声内容,所以很难对其进行增强。对此采取的策略是:首先用拉普拉斯法(Laplace)突出图像中的小细节img1,-->梯度法(Sobel)突出其边缘img2,平滑(b...原创 2019-02-22 14:08:12 · 1635 阅读 · 1 评论 -
OpenCV图像锐化(梯度算子Sobel)
梯度算子• 梯度通过一个二维列向量来定义• 向量的模值实践中通常称为梯度图像。• 考虑一个3x3的图像区域,z代表 灰度级,上式在点z5的f值可用 数字方式近似。• 微分滤波器模板系数设计✓Roberts交叉梯度算子✓Prewitt梯度算子✓Prewitt梯度算子Roberts交叉梯度算子✓梯度计算由两个模板组成,第...原创 2019-02-21 17:22:01 · 7311 阅读 · 1 评论 -
OpenCV非锐化掩蔽和高提升滤波
非锐化掩蔽和高提升滤波在印刷和出版界使用多年的图像锐化处理过程是从原图像中减去一幅非锐化(平滑过的)版本。这个称为非锐化掩蔽的处理过程由下列步骤组成:1、模糊原图像2、从原图像中减去模糊图像(产生的差值图像称为模板)3、将模板加到原图像上。另F(x,y)表示模糊图像,非锐化掩蔽以公式形式描述如下。首先我们要先得到模板:gmask(x,y)=f(x,y) - F(x,y)...原创 2019-02-21 16:40:50 · 2216 阅读 · 1 评论 -
OpenCV图像锐化(Laplace算子)
前面介绍的几种滤波器都属于平滑滤波器(低通滤波器),用来平滑图像和抑制噪声的;而锐化空间滤波器恰恰相反,主要用来增强图像的突变信息,图像的细节和边缘信息。平滑滤波器主要是使用邻域的均值(或者中值、积分)来代替模板中心的像素,消弱和邻域间的差别,以达到平滑图像和抑制噪声的目的;模糊图像,称为低通滤波器锐化滤波器则使用邻域的微分作为算子,增大邻域间像素的差值,使图像的突变部分变的更加明显。锐化...原创 2019-02-21 15:42:32 · 34788 阅读 · 4 评论 -
OpenCV实现自己的线性滤波器 C++
卷积卷积是在每一个图像块与某个算子(核)之间进行的运算。核核说白了就是一个固定大小的数值数组。该数组带有一个锚点,一般位于数组中央。如何用核实现卷积假如你想得到图像的某个特定位置的卷积值,可用下列方法计算:将核的锚点放在该特定位置的像素上,同时,核内的其他值与该像素邻域的各像素重合; 将核内各值与相应像素值相乘,并将乘积相加; 将所得结果放到与锚点对应的像素上;...原创 2019-02-21 13:47:51 · 556 阅读 · 1 评论