有时,我们需要转换图像的颜色空间。例如,当图像执行阈值处理和边缘检测时,三个通道的图像很难执行梯度检测,因此我们执行颜色域转换:BGR:BGR:BGR <-> 灰色,BGR <-> HSV
此外,我们将尝试在视频中提取非有产子对象。
下面我们将学习两个功能:cv.cvtcolor()转换颜色空间,cv.inrange(),等。
OPENCV包含150多种颜色域转换方法,但我们只需要注意两个:BGR <-> 灰色,BGR <-> HSV,颜色域转换功能如下:
在了解将BGR映像转换为HSV图像的方法之后,我们可以使用它来提取非颜色的对象。与BGR Image Love相比,在HSV图像中,我们更容易表示颜色。,我们将使用以下步骤提取非有产子对象:
我们可以在网站上查找相关答案:https://www.stackoverflow.com/.in。此外,我们还可以使用cv.cvtcolor()函数将bgr转换为hsv.you不需要传递图像,您只需要传递相应的BGR值。
一行三个通道,定义多行和许多行,您可以直接使用np.zeros
现在,您将[H-10,1100,100]和[H + 10,255,255]分别为下限和上限。此外,您可以使用任何图像编辑工具,例如GIMP或任何在线转换器来查找这些值,但不要忘记调整HSV的范围(主要是第一个角度的范围,将两者划分)。
尝试提取多种颜色,例如蓝色和绿色提取
本节主要包括不同的几何变换图像,例如翻译,旋转,模仿变换等。主要功能是:cv.getPerspectivetransform()
OPENCV具有两个构建的转换功能:CV.WARPAFFINE和CV。WARPESTIVE,可以帮助我们进行各种转换。前者的转换矩阵为23,而后者的转换矩阵大小为3 3 3 3
一般而言,CV.Inter_linear方法适用于所有重塑图像。
翻译是图像位置的过渡。如果您清楚地向(x,y)的方向移动,然后让他转换为$(t_x,t_y)$,那么您可以构造一个变换矩阵M,$ m = begin {{bmatrix} 1&0&0&0t_x 0&1&t_y end {bumatrix} $。
我们可以使用numpy的数组类型(将其保存为np.float32)存储存储此矩阵,这对于后续矩阵操作或传输到cv.warpaffine()函数非常方便
旋转角度的图像旋转为$ heta $是通过转换矩阵实现的:$ m = left [begin {array} {cc} cos heta&-sin heta heta heta heta sin heta&cos heta en eend {array} ight] $,此方法未指定旋转中心。
但是,OPENCV在可调旋转中心提供了变焦旋转,以便它可以在任何位置旋转。修改的更改矩阵为:$ fews [begin {array} {ccc} alpha&beta&beta&beta&(1-alpha)cdot ext {中心} x-beta cdot ext {中心。&alpha&beta cdot ext。 ight] $,
其中,Center.X,Center.Y代表旋转中心的坐标,$ begin {Aligned} alpha&= ext {scale} cdot cos heta beta&= ext {scal} cdot sin heta en en en eend {aligned} $,$,秤是变原
以上只是数学推理的过程。OPENCV提供CV.GETROTATIONMATRIX2D函数,以帮助我们找到上述转换矩阵。
在模仿转换中,原始图像中的所有平行线仍然在输出图像中平行。要找到转换矩阵,我们需要从输入图像中找到3个点,并在输出图像中找到它们的相应位置。CV.GetAfinEtransform将创建一个2x3矩阵,该矩阵将传递给CV.WARPAFFINE进行模仿转换。
对于透视转换,您需要一个3×3转换矩阵。即使在转换后,直线也将保持直线。要找到此转换矩阵,您需要对应于对应于输入图像和输出图像的四个点。点,3点不应是通用线。然后,您可以通过函数cv.getperspectransform找到转换矩阵。
原始:https://juejin.cn/post/709751522590530062