使用 openCV 检测图像中部分被遮挡的矩形

Detecting a partially obscured rectangle in image with openCV

我正在做一个项目,我 运行 遇到了一个情况。我想检测红外图像中的矩形对象(黑色键盘)。背景很干净所以这不是一个真正的难题,我在 OpenCV 中使用简单的 thresholdminAreaRect 来解决它。 Easy case of the problem

但我还希望程序在我用手移动它(是的,实时)时跟踪该对象。而我的手会像这种情况一样覆盖物体的一小部分。 Tricky case of the problem

我最初的想法是在简单的情况下学习对象大小,对于困难的情况,尝试匹配我的 "learned rectangle" 以覆盖尽可能多的白色像素。

谁有更好的解决方案,也许是基于特征的方法?我不知道使用特征是否可以改善这种情况,因为这些红外图像中的物体大部分是黑色的。

提前致谢。

如何在阈值图像上使用膨胀和腐蚀等形态学操作(Opencv 有这些的实现)。一旦你明白了,你可以尝试一些角 detection/contour 检测或线检测器(在 opencv contrib 模块中)来理解物体的形状。

你的 "tricky" 案例仍然相当简单,可以用 dilate/erode 解决(如 Shawn Mathew 所述),然后用相同的 minAreaRect 解决。此处,右侧是使用 5x5 内核腐蚀和膨胀后的阈值图像,minAreaRect 为它找到一个旋转的矩形,绘制在左侧的原始阈值图像上:

您是否对更复杂的情况感兴趣,例如,您的手完全覆盖了键盘的一个短边?