
DIP
文章平均质量分 91
熊叫大雄
雁归时,佳期如梦。
展开
-
[边缘检测算法] Sobel算子及其PC端优化提速20几倍
文章目录前言一、Sobel算子二、实现与优化1.原始版本2.第一版优化3.第二版优化4.第三版优化5.第四版优化6.第五版优化前言 Sobel是图像处理中非常常见的一种边缘检测算法,本文基于C++和OpenCV对Sobel进行了实现,并对代码进行优化。一、Sobel算子 Sobel算子是图像处理中的一个离散微分算子,经典的Sobel算子包含了一个33的矩阵(OpenCV中的Sobel是包含其它尺寸的,本文原创 2021-03-05 11:12:41 · 4184 阅读 · 1 评论 -
Dlib笔记二:matrix或array2d与cv::Mat的互转
因为经常习惯的用OpenCV来做图像处理,所以难免希望将其他库的图像数据与OpenCV互转,所以今天就记录下这种互转的方法。1、dlib::matrix/dlib::array2d转cv::Mat前面说了,定义好一个matrix或者array2d的变量后,是可以通过nr()和nc()函数来获取图像的高度和宽度(行数和列数),然后我们可以通过image_data()来获取数据指针,这个时候要...原创 2019-09-07 11:28:52 · 1340 阅读 · 0 评论 -
瑞士军刀DLib的VS2015编译
Dlib的官方解释是:Dlib is a modern C++ toolkit containing machine learning algorithms and tools for creating complex software in C++ to solve real world problems. It is used in both industry and academia ...原创 2019-09-06 16:28:59 · 254 阅读 · 0 评论 -
白平衡之完美反射算法
一、算法背景 白平衡是图像处理比较常见的一个概念,在采集图像的过程中,相机的感光元件或者镜头会对原始色彩造成影响,而白平衡技术通常可以用来校正这种光线和镜头对颜色影响。所以现在先记录一个白平衡算法,叫做完美反射算法,这个算法原理也不是有多复杂,但是效果还是挺好的,而且基本也不需要调节参数就有效果了。完美反射算法很多博客都有介绍,而且实际上也还是就几个公式,所以我也是简单记录重要的公式和实现代码...原创 2020-04-05 15:48:36 · 5182 阅读 · 4 评论 -
白平衡之灰度世界算法
一、算法背景 白平衡是图像处理比较常见的一个概念,在采集图像的过程中,相机的感光元件或者镜头会对原始色彩造成影响,而白平衡技术通常可以用来校正这种光线和镜头对颜色影响。所以现在先记录一个白平衡算法,叫做灰度世界算法,这个算法很多博客都有介绍,而且实际上就几个公式,所以我也是简单记录重要的公式和实现代码而已。二、算法原理 灰度世界算法(Gray World)假设认为,一幅彩色图像中,RGB...原创 2020-04-05 00:43:19 · 3572 阅读 · 0 评论 -
暗通道去雾法
一、算法背景 暗通道先验去雾算法是大神何恺明2009年发表在CVPR上的一篇论文,还获得了当年的CVPR最佳论文。 根据论文的介绍,暗通道去雾算法是基于一个关键的观察:在没有雾霾的室外图像中,大多数局部区域包含一些像素,这些像素在至少一个颜色通道中具有非常低的强度(原文:It is based on a key observation - most local patches in haz...原创 2020-03-29 17:39:31 · 13887 阅读 · 3 评论 -
Tensorflow Cpp API调用训练好的模型
之前的笔记有一篇完成了对tensorflow的编译,然后简单写了个测试程度,所以,应该是可以用了的,然后上篇简单写了个基于Keras的手写数字识别的的模型需要你连了一下,那么现在就试试用tensorflow的 C++ API调用训练好的模型测试下。这里推荐一个GitHub上找到的项目,用的C++调用tensorflow API的。首先,前面把模型保存为了.h5文件,但是,很遗憾,我查到的资料都...原创 2019-10-24 11:27:35 · 1542 阅读 · 1 评论 -
Hough Transform直线检测
霍夫变换(Hough Transform)是Paul Hough于1962年提出来的,一开始是用于检测图像中的直线的,后来还扩展到检测圆、检测任意形状的物体等。关于霍夫变换的博客多得不胜枚举,而且很多都是很厉害,解释的非常详细而且通俗。现在我就写一下我自己的理解,个人笔记,不一定准确。一、原理理解部分首先,我们关于平面中的一条直线有如下表达在笛卡尔坐标中表示为这...原创 2019-09-17 11:02:48 · 406 阅读 · 0 评论 -
[OpenCV] 直方图均衡化
直方图是图像处理中最最最最基本的操作之一,这个基本操作是在太太太太常见了,同时也是很容易理解的操作,对于一些对比度稍微较低的图像,这是一个还挺不错的预处理操作。1、直方图先说直方图,直方图就是图像像素的统计表,这个表里记录着一幅图像中每个像素值在图像中出现的个数,一幅图只有一个灰度直方图,但是多幅图可能有相同的直方图,这是N对1的关系。所以在制作直方图的时候就很容易啦,创建一个包含所有像素...原创 2019-10-12 14:17:32 · 254 阅读 · 0 评论 -
OpenCV--基于直线检测的文本图像倾斜校正
图像倾斜矫正的方式有很多种,今天简单介绍一种基于直线检查的倾斜校正。这种方法暂时在如下图的文本文件上测试过,不一定能针对所有:首先,因为这种图像基本是比较常见的白底黑字,所以首先对这幅图做一个灰度化,灰度化之后做一个二值化,得到二值图像:二值化之后,将X轴方向的的像素点连起来,这里我采用的是形态学的膨胀,因为我做二值化的时候采用了取反的操作,这里可以考虑不取反,但是要用腐蚀来做...原创 2019-12-02 11:26:07 · 4789 阅读 · 2 评论 -
Python调用OpenCV形态学
图像形态学处理包括腐蚀、膨胀、开运算、闭运算、形态学梯度、礼帽(顶帽)、黑帽等运算。1、腐蚀腐蚀可以理解为前景像素会被腐蚀为背景像素,以白色255为前景,得到的效果就是白色变小、变细,黑色变大变粗:importcv2importnumpyasnpimg=cv2.imread('lena.jpg',0)kernel=np.ones((5,5),np.uint...原创 2019-11-21 14:21:43 · 263 阅读 · 0 评论 -
Python调用OpenCV读显写
OpenCV提供了python的接口,而且很重要的一点是python下的很多接口名与C++的接口名是一样的,这一篇先记录python调用OpenCV去读取图像、显示图像和保存图像。1、OpenCV读取图像cv2.imread与C++下的接口一样,Python下的读图的接口也还是imread():img=cv2.imread("D:\images\lena.jpg",flags=...原创 2019-10-22 15:06:13 · 213 阅读 · 0 评论 -
Python调用OpenCV颜色空间
Python调用OpenCV的颜色空间转换函数是cv2.cvtColor(),OpenCV提供了很多中颜色空间转换,这里可以借助一个函数来获取所有的转换标识:flags=[iforiindir(cv2)ifi.startswith('COLOR_')]这个可以得到如下的标识符:['COLOR_BAYER_BG2BGR','COLOR_BAYER_BG2BGRA','...原创 2019-10-29 08:02:28 · 708 阅读 · 0 评论 -
Python调用OpenCV阈值化
这一篇主要有两点:普通阈值化和自适应阈值化。1、普通阈值化普通阈值化用到的函数是cv2.threshold,其函数原型为:threshold(src,thresh,maxval,type,dst=None)其中,type的取值有以下几种cv2.THRESH_BINARY、cv2.THRESH_BINARY_INV、cv2.THRESH_TRUNC、cv2.THRESH...原创 2019-10-30 13:24:54 · 605 阅读 · 1 评论 -
Python调用OpenCV算术操作
Python调用OpenCV的很多操作都是类似numpy的操作的,这篇内容包括加法操作、图像混合、按位运算。1、加法图像的加法可以用cv2.add()来实现,如果相加后的像素值超过255,则取255,也可以用numpy的+操作,但是+操作的话与add函数不同的地方在于numpy的加法是取模操作,也就是说如果相加之后大于255,那么就会对256取模:importnumpyasnp...原创 2019-11-02 13:55:06 · 185 阅读 · 0 评论 -
Python调用OpenCV几何变换
这一篇就记录三个:图像缩放、平移和镜像。1、图像缩放图像缩放用到的函数是cv2.resize()函数,函数原型如下:resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)OpenCV提供了几种缩放方式:cv2.INTER_AREA、cv2.INTER_CUBIC、cv2.INTER_LI...原创 2019-11-05 14:14:07 · 273 阅读 · 0 评论 -
Python调用OpenCV像素操作
Python调用OpenCV进行操作的时候基本上感觉就是对numpy进行操作,跟numpy是挺相关的。1、像素操作OpenCV获取图像(x,y)处的像素值:px=img[x,y]当图像是三通道的时候返回的是BGR三通道的值,如果是灰度图的话就返回一个亮度值同样的如果要对图像(x,y)处赋值的话,也通过这种方式来实现:#三通道img[x,y]=[255,255,255]...原创 2019-11-10 09:36:00 · 1107 阅读 · 0 评论 -
Python调用OpenCV测试程序运行时间
OpenCV有提供测代码运行时间的函数,类似C/C++的。估计是一样的吧,看结果importnumpyasnpimportcv2ascvsrc=cv.imread("D:/lena.bmp")src=cv.resize(src,(1024,1024))e1=cv.getTickCount()img1=cv.medianBl...原创 2019-11-10 09:40:06 · 564 阅读 · 0 评论 -
Python调用OpenCV滤波
这一篇记录几种OpenCV提供的滤波函数,包括2D卷积、平均滤波、高斯滤波、中值滤波和双边滤波。1、2D卷积2D卷积使用的是OpenCV提供的filter2D()函数,该函数需要传入一个卷积核,这个卷积核可以通过numpy来构造:importnumpyasnpimportcv2ascvsrc=cv.imread("D:/lena.bmp")kernel=n...原创 2019-11-11 08:25:52 · 496 阅读 · 0 评论 -
Python调用OpenCV代码优化
OpenCV提供的API的代码大部分是经过优化的,很多都是经过SSE或者AVX等技术优化了函数,并且是默认打开优化的。其实,我们也可以查询OpenCV是否进行了函数优化,查询的函数为:cv2.useOptimized()如果打开了优化的话是返回True,反之返回False。我们也设置关闭或者开启优化,设置的函数为:cv2.setUseOptimized(False)cv2...原创 2019-11-13 11:16:34 · 686 阅读 · 0 评论 -
Dlib笔记一:基本数据结构和基本操作
编译了Dlib之后就开始想着怎么用起来,先从基本的数据类型说起吧,因为是图像,所以难免会跟OpenCV的数据类型比较。在Dlib中,图像是用二维阵列(array2d)或者矩阵(matrix)来表示的,matrix和array2d的很多操作其实是一样的,所以这一篇还是以array2d的操作为主来讲,matrix的操作基本上也是这样。array2d是有行数、列数、像素类型等参数的,定义好一个arr...原创 2019-09-05 20:22:43 · 648 阅读 · 0 评论