18 caimouse

尚未进行身份认证

毕业于西北工业大学,在IT行业有20多年的经验。

等级
TA的排名 25

在OpenCV里学习常见问题汇编28

问题二十八:仿射变换( Afine Transformations )——平行移动这个问题要求把图像在X轴上方向移动30个像素,在Y轴上方向减少30个像素,因此这个需要使用仿射变换公式,如下:在这个公式里只是平移变换,需要把这些系数改为下面这样:其实就是变成这样:x_new = a * x + b * y + txy_new = c * x + d * y + ty...

2020-04-01 11:35:58

在OpenCV里学习常见问题汇编27

问题二十七:双三次插值( Bicubic Interpolation )在这里采用双三次插值实现放大图像1.5倍,它计算量要比双线性二次插值要大,不过它的效果也比双线性二次插值要好。双三次插值,英文是Bicubic interpolation。双三次插值是一种更加复杂的插值方式,它能创造出比双线性插值更平滑的图像边缘。双三次插值方法通常运用在一部分图像处理软件、打印机驱动程序和数码相机中,对原...

2020-03-31 10:06:23

在OpenCV里学习常见问题汇编26

问题二十六:双线性插值( Bilinear Interpolation )前面是使用近邻插值,会发现显示的效果不是很好,会有马赛克现象,为了改善这种情况。在这个问题里采用双线性插值来解决,要想理解双线性插值,先来看看一维的线性插值:一般情况之下,插值都是位于原来两个像素点之间进行,那么y1-y0等于1,x1-x0也等于1,因此,y=y0+(x-x0)。对于双线性插值时,可以用下图来表示...

2020-03-30 11:54:33

在OpenCV里学习常见问题汇编25

问题二十五:最邻近插值( Nearest-neighbor Interpolation )最近邻插值在图像放大时补充的像素取最临近的像素的值。由于方法简单,所以处理速度很快,但是放大图像画质劣化明显。使用下面的公式来进行计算:在这里我们使用a=1.5来放大图像,再进行近邻插值。原图如下:处理后图片如下:整个例子完整的代码如下:#python 3.7.4,op...

2020-03-29 21:06:21

在OpenCV里学习常见问题汇编24

问题二十四:伽玛校正(Gamma Correction)由于照相机等电子设备传感器的非线性光电转换特性,必然导致图像的失真,为了恢复图像的原来真实的图像,采用伽玛校正对图像进行处理。可以把这个变换的公式用下面来表示:这里x为为0到1,c是常数,g为伽玛系数,通常为2.2,可以用代码表示如下:c = 1.g = 2.2out = img.copy().astype(...

2020-03-29 12:24:15

在OpenCV里学习常见问题汇编23

问题二十三:直方图均衡化( Histogram Equalization )这个问题就是对直方图进行操作,不过是全局地考虑所有元素。直方图均衡化(Histogram Equalization) 又称直方图平坦化,实质上是对图像进行非线性拉伸,重新分配图像象元值,使一定灰度范围内象元值的数量大致相等。这样,原来直方图中间的峰顶部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个...

2020-03-28 13:41:55

在OpenCV里学习常见问题汇编22

问题二十二:直方图操作这个问题就是对图像直方图进行一个指定的操作,比如要让图像变换之后平均值为128,标准差为52,那么就可以采用下面的公式来变换:xout = s0/s * (xin - m) + m0输入的图像如下图:最终变换为:可以后面的图像比前面的图像,对比度进行了很大的提升。它的直方图也更好了:在这里主要使用这段代码来进行变换:m0 = 12...

2020-03-27 16:39:45

在OpenCV里学习常见问题汇编21

问题二十一:直方图归一化这个问题就是进行图像灰度变换,适应人眼的变化。有些灰度图像的像素并没有分布在 [0,255] 内,而是分布在 [0,255] 的子区间内。这样的图像肉眼看上去往往不是很清晰。我们可以通过直方图归一化的方式,将它的像素分布从 [0,255] 的子区间变为 [0,255] 范围内。通过这样的方式,往往可以增加图像的清晰度。往往可以通过下面的公式来进行变换:像下面的图...

2020-03-26 18:35:39

在OpenCV里学习常见问题汇编20

问题二十:直方图这个问题,就是显示一个图片的直方图,因为直方图对一个图像的分析比较重要,它可以分析出图像的对比度,以及图像的像素分布情况。这里使用Matplotlib来画直方图非常简单的,代码只有几行:plt.hist(gray.ravel(), bins=255, rwidth=0.8, range=(0, 255))plt.savefig("out.png")plt.show(...

2020-03-25 16:51:31

在OpenCV里学习常见问题汇编19

问题十九:LoG滤波器由于Laplace算子是通过对图像进行微分操作实现边缘检测的,所以对离散点和噪声比较敏感。于是,首先对图像进行高斯卷积滤波进行降噪处理,再采用Laplace算子进行边缘检测,就可以提高算子对噪声和离散点的鲁棒性,如此,拉普拉斯高斯算子Log(Laplace of Gaussian)就诞生了。这个滤波器的过程就是先要对高斯函数进行二阶求导,来看一下高斯函数的二维表达式:...

2020-03-24 09:31:23

能否提高std::string的效率?

在C++里,使用std::string来替代C类型的字符串,这样方便构造和删除,又可以避免C类型的错误。不过,有人说std::string在传送参数时效率低下,比C类型的指针要慢,这种情况是真实的,要改善这种情况,就需要使用C++17里的新类std::wstring_view,这样就可以避免这个问题,它提供了一个快速访问std::string类的方式。代码如下:void f(std::wst...

2020-03-23 10:55:48

在OpenCV里学习常见问题汇编18

问题十八:Emboss滤波器Emboss滤波器常用于检测图像的边缘和轮廓,能够有效地增强图像的高频信息(边缘和轮廓),并保留图像的低频信息(图像内容)。这个滤波器与前面有一点不同,就是保留了图像内容,只是对边缘进行增强,前面很多滤波器只是保留了边缘信息。因此,这个滤波器定义也不一样,如下:这个滤波器从形式上来看是对角线方向对称的,并且也是不可以拆分的滤波器。处理的图片效果如下:...

2020-03-23 09:59:41

用Python来构造串口测试程序

对于很多嵌入式工程师来说,经常需要使用各种串口来显示数据和测试,有时候需要自动化地测试命令,使用一般的串口工具就难以满足要求,这时使用Python来写串口程序,就更加方便了。因为它可以根据嵌入式系统发送出来的命令,进行不同的情况处理,可以回应不同的命令。另外也可以使用它来过滤没用的数据,比如关注特定的日志,这样就可以少花费时间。下面就来做一个串口的程序,首先使用pip安装串口模块:pip ...

2020-03-22 18:06:21

C++里怎么样让类对象删除时自动释放动态分配的内存?

经常有这样的需求,在一个类里一些成员变量需要动态地分配内存,以前是把这个成员声明为指针,然后在构造函数里指定为NULL类型,然后在析构函数里判断这个指针是否分配了内存,如果分配了就进行删除。这种方式需要人工来做,工作量有点大,能否有更加高效的,能否有偷赖的方式呢?这是有的,如下的例子:#include <memory>class widget{private: st...

2020-03-22 12:25:07

C++怎么样使用range-based for

range-based for是C++增加的一个重要特性,大大地加快写循环代码的能力,特别是智能指针,模板等对象的引用。因此,在所有项目工程里,尽量使用这种方式,不要再使用旧的方式了,具体使用的方式,可以参考下面的代码:// range-based-for.cpp// compile by using: cl /EHsc /nologo /W4#include <iostre...

2020-03-22 12:10:49

在OpenCV里学习常见问题汇编17

问题十七:Laplacian滤波器前面学习和使用的都是使用一阶微分来检测图像的边缘,这个问题是使用Laplacian滤波器,它是二阶微分计算的滤波器。由于图像是一个二维的方程,可以分别对X和Y进行偏导,计算如下:接着再对上面的导函数进行二次求导,就可以表示如下:有了二阶导数之后,就可以定义Laplacian滤波器如下:根据这个公式,就可以把前面的系数提取出来,构造下面的...

2020-03-22 11:56:53

在OpenCV里学习常见问题汇编16

问题十六:Prewitt滤波器Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。在这里采用3X3的核:对图片进行处理后的效果:原图水平计算之后图片垂直计...

2020-03-21 09:13:15

在OpenCV里学习常见问题汇编15

问题十五:Sobel滤波器前面使用差分滤波器来检测边缘的特征,这种方法是来源于数学上的微积分,如果在这个基础之上,再加上正态分布,也即是高斯分布,那么就得本文里的Sobel滤波器,因此它也是用来检测图像的边缘,它的3X3的格式定义如下:使用这个核来与图像的元素进行相乘再来求和,就可以得到图像的边缘。原图水平Sobel滤波的结果垂直Sobel滤波的结果这...

2020-03-20 09:28:33

在OpenCV里学习常见问题汇编14

问题十四:差分滤波器首先我们来了解一下什么是差分滤波器,差分就是计算两个元素之差。在图像里主要指按不同的方向进行梯度运算,在离散的图像里其实就是相邻的元素进行相减的动作。差分滤波器可以用来检测图像的边缘,因为在边缘上,像素点的值与不是边缘的值差别很大。这里使用下面的差分滤波器:在这里采用了3X3的差分核,分为两个方向一个垂直方向,另一个水平方向。下面来看看这两个滤波器处理后的图片:...

2020-03-19 10:41:31

在OpenCV里学习常见问题汇编13

问题十三:MAX-MIN滤波器前面学习过均值滤波器,就是取一块窗口里数据的平均值,现在考虑一下,我们来选取这个窗口里的最大值和最小值出来,然后再用它们之间的差值来代替,这种计算方式就叫做MAX-MIN滤波。图像的细节属于低频信息,图像的边缘属于高频信息,使用一定大小的 Max-Min 滤波器作用于图像,当滤波器作用于图像细节时,输出结果往往趋向于0(黑色);而滤波器作用于图像边缘时,M...

2020-03-18 17:56:49

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 1024超级勋章
    1024超级勋章
    授予原创文章总数达到1024篇的博主,感谢你对CSDN社区的贡献,CSDN与你一起成长。
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    参与《原力计划【第二季】— 学习力挑战》获得推荐的原创文章的博主
  • 博客之星-入围
    博客之星-入围
    授予每年博客之星评选结果第21-200名的用户