如何制作自己的隐形斗篷
理论
请把代码给我看看。
我想开始学习计算机视觉,而且我从小就喜欢哈利·波特,所以我的第一个实验就是尝试制作哈利梦寐以求的隐形斗篷。
本文将介绍颜色检测、颜色空间和 OpenCV。
在这个演示中,我使用了 GoCV,因为我也想进一步尝试 Go + 计算机视觉。
对于不熟悉的人来说,这就是隐形斗篷。
它能让穿戴者隐身!
理论
色彩空间
我们首先需要了解的是色彩空间。大多数人都熟悉RGB色彩空间。如果您不熟悉,这里有一篇解释RGB的文章。
这种色彩空间的问题在于,它试图用一个值来描述红色、绿色和蓝色三种颜色的强度。这对于显示效果来说没问题,但对于视频中的颜色检测却不适用。
自然界的颜色很大程度上取决于光照,即使是同一种颜色,任何物体也都有一系列色调。
这就是 HSV 色彩空间发挥作用的地方。HSV 使用一个通道——色调 (H) 来描述颜色,这意味着颜色主要取决于色调,而不同的明暗和光照则由饱和度 (S) 和明度 (V) 来考虑。
因此,在我们的例子中,一块布料可能整体呈绿色,但由于褶皱、室内光线等原因,布料的不同部分会呈现略微不同的颜色。使用 HSV,我们只需要调整明度 (V) 来考虑光线变化,我们的算法仍然能够识别出不同的绿色。
CV中的蒙版和变形
蒙版本质上就是另一张图像,你可以将其应用到另一张相同大小的图像之上。
变形(Morping)一词用来描述对图像应用特定变换的过程。OpenCV 提供了几种不同的变换,所有这些变换都基于“内核”。
在图像处理领域,内核是一个矩阵,它用于实际应用我们想要的不同效果,例如模糊或膨胀。
点击此处查看改造过程
请把代码给我看看。
让我们更仔细地看一下代码。
在这个模块中,我们将进行所有设置,创建视频捕获对象(0 指的是网络摄像头),创建窗口,设置我们将使用的各种遮罩对象,并设置绿色斗篷的 HSV 值。
在这里,我们通过休眠来获取静态背景,这样网络摄像头就有时间启动,视频也有时间加载(如果我们在网络摄像头启动后立即捕获背景,最终会在背景中出现一些奇怪的光线)。
然后我们开始不断从网络摄像头读取帧,并进行一些转换。
首先,我们将图像帧转换为 HSV 颜色空间。
然后,我们对 HSV 图像进行过滤,提取出位于 HSV 绿色空间内的像素,并创建一个掩码。这样,我们就可以专门为绿色斗篷创建一个掩码。
一旦我们找到了自己的斗篷,魔法就可以开始了。
在这里我们可以看到,我们先创建了内核,然后进行膨胀操作。到目前为止,我们的斗篷上已经覆盖了一层黑色的膨胀蒙版。
膨胀是一种形态变换,它可以增大物体的面积。我利用这种变换来确保所有彩色区域都被我们的面具覆盖,同时保持斗篷的形状。
因为我们希望它不可见,所以我们反转蒙版。
现在,我们有了一个“隐形”面具,它的形状就是我们的斗篷。
最后一步是将蒙版、边框和背景组合起来,并将成品显示在屏幕上。
现在你拥有了自己的隐形斗篷!
笔记
我建议你根据需要调整 HSV 值,尝试不同的光照和颜色,以获得最佳效果。就我而言,我公寓的照明条件相当不错,不同区域的光线也略有不同,所以我可以尝试不同的数值和位置,最终得到类似这样的效果。
文章来源:https://dev.to/aarushikansal/how-to-create-your-own-invisibility-cloak-4ndg





