1. 磐创AI-开放猫官方网站首页
  2. Medium

OpenCV指南第2部分

大家好,

希望大家都好,在前面的博客中,我们已经开始学习OpenCV的基础知识。在那里,我们已经看到了如何执行图像和视频大小调整、裁剪等操作,这是OpenCV教程的第二部分。在这篇博客中,我们主要关注这一部分的先行部分,它将涵盖下面提到的问题。但是如果你是OpenCV的新手,或者觉得这很难理解,那么请访问OpenCV基本指南第1部分的博客,并温习一下基础知识,然后再回到这个博客。OpenCV basic guide part-1

至今仍在我们脑海中挥之不去的问题是:

☞如何在图像中进行边缘检测?

☞如何在图像中进行轮廓检测?

☞如何在图像中实现色彩间隔?

☞如何处理颜色通道?

☞如何模糊图像?

☞如何使用BITWISE运算符?

☞如何绘制图像每个像素的颜色直方图?

让我们从比特深度的所有问题开始。

如何在图像中进行边缘检测?

1.1.精明:

对于这里的边缘检测,我们将使用cv.Canny方法。输入图像为原始图像,保留-1,即像素值低于150为非边缘,阈值为-2,即像素值大于175为有效边缘。如果该值在150和175之间,则如果边缘像素与有效边缘相连,则仅将其视为有效边缘。

上述代码的输出:

原图:

原始图像的边缘:

现在我们将尝试通过使其模糊来找到原始图像的边缘。如何使图像模糊在博客中有进一步的介绍。

通过比较原始图像和模糊图像的边缘检测。我们知道图像中的边缘检测随着图像变得越来越模糊而减少。

1.2.拉普拉斯式:

在拉普拉斯边缘检测方法中,我们将计算源图像(x,y)像素的第二梯度。当ksize>1时,检查下面提到的源镜像的拉普拉斯公式:

当ksize=1时,通过使用以下3×3光圈对图像进行滤波来计算拉普拉斯系数:

其中ksize:用于计算二阶导数滤波器的孔径大小。大小必须是正数和奇数。

上述代码的输出:

拉普拉斯边缘检测:

1.3 Sobel边缘检测:

在计算拉普拉斯量时,我们计算了二阶导数,称为Sobel。因此,在Sobel检测中,我们将计算Sobelx(也称为水平Sobel导数)和Sobely(也称为垂直Sobel导数)。我们可以通过与大小为3*3的核的输入图像进行卷积来计算SOBELX和SOBASE(但我们可以根据需要改变核的大小)。

拉普拉斯公式中的Sobelx和Sobely:

卷积中提到的3*3矩阵为:

Sobel边缘检测的代码演练。

上述代码的输出:

Sobelx:

索比利:

合并Sobel和Sobel的POST:

1.4.侵蚀和膨胀:

1.4.1侵蚀:

  • 它对消除小的白噪声很有用。
  • 用于分离两个相连的物体等。

它的工作原理:

1.4.2扩容:

  • 在像去噪这样的情况下,侵蚀之后是膨胀。因为,侵蚀去除了白噪音,但也缩小了我们的物体。所以我们把它放大。既然噪音消失了,它们就不会回来了,但是我们的目标面积增加了。
  • 它在连接对象的破碎部分时也很有用。

它的工作原理:

膨胀和侵蚀的代码演练:

上述代码的输出:

将图像输入到cv.diplate():

膨胀:它会增加边缘的厚度

侵蚀:这里的输入图像是cv.diplate输出。所以现在侵蚀输出会恢复输入图像的扩张。

2)如何进行镜像中的轮廓检测?

有时,如果我们对图像进行边缘检测和轮廓检测,那么两者的输出可能看起来相似。但一般来说,与边缘检测相比,轮廓检测将更加详细。

cv.findContours函数中的一些重要参数包括:

图像:输入图像应为二进制As Source,8位单通道图像。非零像素被视为1,零像素仍为0,因此图像被视为二进制。

等高线检索模式:

1)cv.RETR_TREE→它将给出图像中的分层轮廓。

2)cv.RETR_EXTERNAL→它将只给出图像中的外部轮廓。

3)cv.RETR_LIST→它将给出图像中存在的所有轮廓。

轮廓近似方法:

1)CHAIN_APPROX_NONE→它将给出映像中存在的所有计数器。

2)CHAIN_APPROX_SIMPLE→它将给出图像中的重要轮廓,例如,如果我们有直线,它将只给出图像中的起点和终点,而在CHAIN_APPROX_NONE的情况下,我们会得到所有的点。

现在让我们来看看它实际上是如何工作的。

上图输出:

现在我们将模糊图像并检查等高线的数量

上述代码的输出:

通过对图像及其总轮廓线的观察,可以看出模糊图像中的轮廓线比原始图像的轮廓数要少。现在我们将尝试在空白图像上绘制图像的轮廓

上述代码的输出:

用于查找等高线的图像:

在空白图像上绘制等高线:

3)如何在画面中进行色彩间隔?

我们知道每种颜色都是红、绿、蓝三种颜色的组合。因此,我们通常将颜色间隔称为RGB,如果我们分析图像和视频,同样也适用。但在OpenCV中,颜色间隔的顺序相反,即BGR。检查下面提到的代码,我们将在其中使用OpenCV以及matplotlib查看图像,并观察更改。

使用OpenCV创建BGR图像:

与我们将使用matplotlib尝试绘制的图像相同

所以我们在这里观察到,由于颜色间隔的原因,颜色发生了相反的变化。

现在,我们将尝试如何使用cv.cvtColor()方法将BGR颜色间隔转换为不同的颜色间隔

3.1)BGR至Gray:

输出:

3.2)BGR至HSV:

输出:

3.3)实验室的BGR:

输出:

3.4)BGR至RGB:

输出:

我们还可以通过使用下面提到的颜色间隔来反转上述图像颜色间隔:

cv.COLOR_HSV2BGR

cv.COLOR_LAB2BGR

cv.COLOR_GRAY2BGR

cv.COLOR_BGR2RGB

4)如何处理颜色通道?

5)如何模糊图像?

6)如何使用BITWISE运算符?

7)如何绘制图像每个像素的颜色直方图?

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/06/23/opencv%e6%8c%87%e5%8d%97%e7%ac%ac2%e9%83%a8%e5%88%86/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息