有没有一种方法可以用OpenCV从背景中辨别出物体?

gajydyqb  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(224)

我一直希望有一种设备,能够从实时摄像头馈送中检测到一个物体,创建它的3D模型,然后识别它。它的工作原理很像Subnautica的Scanner工具。想象一下当我发现OpenCV时我的惊讶吧,这是一个免费使用的Python计算机视觉工具!
我的第一步是让计算机识别出摄像机画面中心有一个物体。为此,我找到了一个Canny() function,它可以检测边缘,并将其显示为黑色图像中的白色,这样就可以完整地勾勒出中心物体的轮廓。我还使用了floodFill()函数用灰色填充白色之间的黑色区域,这表明计算机识别出那里有一个对象。
The red dot is the center of the live video.
问题是,由于两种颜色之间的模糊,边缘线可能有洞,范围从单个像素到整个缺失的线。结果,灰色出来,并没有突出显示我作为唯一的对象,而是突出显示了整个墙壁。有没有办法填补这些缺失的像素,或者有没有更好的方法来做到这一点?

bqucvtff

bqucvtff1#

欢迎来到SO和机器视觉的现有世界!
你所描述的是一个非常经典的问题,而不是一个微不足道的问题。它在很大程度上取决于你所定义的感兴趣对象的形状和外观,以及背景的整体结构、均匀性和颜色。记住,计算机对“对象”是什么没有概念,它唯一“知道”的是一个数字矩阵。
在你的例子中,你可以从颜色(或色调,查找HSV)选择背景区域开始。其他的一切都是你的对象。这是经典的绿网技术所做的,它只适用于(a)一个同质的背景,它不与你的对象共享一种颜色,(b)一个或多个不重叠的对象。
基于边的方法的问题是,您无法安全地获得闭合边,并且确定对象的内部和外部位置可能会变得棘手。
高级的方法可以让你进入神经网络的领域,但也许你应该先把基础知识弄清楚。
以下是有关转换色彩空间和提取轮廓的教程的两个链接:
https://docs.opencv.org/4.x/df/d9d/tutorial_py_colorspaces.html
https://docs.opencv.org/3.4/d4/d73/tutorial_py_contours_begin.html
如果你搞清楚了,看看立体视觉或3D成像一般,和亚航行扫描仪可能只是成为现实的一天;)
祝你好运!

相关问题