使用 OpenCV 进行动态背景分离和可靠的圆圈检测
Dynamic background separation and reliable circle detection with OpenCV
我正在尝试在类似颜色的背景上检测彩色网球。我正在使用OpenCV和C++
这是我正在使用的测试图像:https://i.stack.imgur.com/yXmO4.jpg
我尝试过使用多个边缘检测器; sobel,laplace和canny。这三者都检测白线,但是当阈值处于可以检测到网球边缘的值时,输出中的噪声过多。
我也尝试过霍夫圈变换,但由于它是基于精明的,所以效果不佳。
我不能使用背景减法,因为背景可以移动。我也无法修改阈值,因为照明条件可能会在网球内产生渐变。
我觉得我唯一的选择是模板匹配或检测白线,但是如果可能的话,我想避免这种情况。
你有什么建议吗?
我不得不倾斜屏幕才能自己发现网球。这是一个硬形象。
也就是说,Hough变换的默认OpenCV实现使用Canny边缘检测器,但它不是唯一可能的实现。对于这些较难的情况,您可能需要自己重新实现它。
您当然可以使用不同的边缘检测设置重复运行 Hough 算法,以生成多个候选项。除了直接比较候选项外,您还可以检查每个候选项是否具有主导纹理(在局部阴影校正后)和可能的条纹。但是,如果这些网球实际上是在飞行中捕获的,即移动,这可能会非常棘手。
在边缘检测之前,您对彩色图像做了什么?简单地将其转换为灰色?
根据我的经验,当您使用 HSV 颜色空间时,彩色球弹出得最好。然后,您必须决定哪个频道提供最佳结果。
也许将图像转换为不同的特征空间可能比依靠颜色更好。也许尝试对质地做出反应的LBP。然后对结果进行 PCA,将特征空间减少到 1 个单通道图像,并尝试对此进行霍夫变换。
相关文章:
- 使用CMake检测支持的C++标准
- 当套接字连接断开时检测C/C++Unix
- C/C++预处理器是否可以检测一些编译器选项
- WMI检测进程创建事件-c++
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 下面是我为检测链接列表中的循环而制作的代码
- 落砂模拟碰撞检测C++和SFML
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 为什么C++编译器没有检测到正确声明的类?
- 检测win32服务创建和删除的最佳方法
- C++:如何读取分离变量,然后读取向量
- 正在LLVM中检测整数比较条件
- 分离一个静态常量 std::thread?
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 如何在鼠标挂钩过程中检测拖动
- 位移操作和位掩码未检测到重复字符
- 检测 COFF 对象文件中C++内联符号
- qmake:检测目标位宽(32 位或 64 位)
- 从图像中检测和分离单个未知物体(计算机视觉)
- 使用 OpenCV 进行动态背景分离和可靠的圆圈检测