使用OpenCV进行非转换对象检测

时间:2017-09-27 22:54:48

标签: python opencv object-detection

我要做的是检测图像中的2D对象。然而,这个和典型的眼睛/面部检测之间的差异在于,我试图检测的2D对象不会以任何方式进行转换,除了缩放旋转部分阻止(例如计算机屏幕截图中的某个图标。)

我试图用一张正像(物体)和600张负像(从背景图像中随机选择)训练一个哈尔级联,但结果并不令人满意。特别是,opencv_createsamples创建了奇怪的缩放样本(部分被截断,有些缩放得太大)。这些是我使用的参数:

# Create samples
opencv_createsamples -img positive_images/icon.png -bg negatives.txt\
  -num 1500 -bgcolor 0 -bgthresh 0 -maxxangle 0  -maxyangle 0 -maxzangle 6.28\
  -maxidev 40 -vec pos.vec -maxscale 2 -w 25 -h 25

# Train cascade
opencv_traincascade -data classifier -vec pos.vec -bg negatives.txt\
  -numStages 20 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 1000\
  -numNeg 600 -w 25 -h 25 -mode ALL -precalcValBufSize 4096\
  -precalcIdxBufSize 4096

由于任务似乎比一般的对象检测任务简单,我想知道是否有更好的方法来做到这一点。如果没有,有什么方法可以获得更好的结果?

编辑,这是我正在使用的一些示例图像:

样本(正面)对象:
enter image description here

样本背景(600个中的2个):
enter image description here enter image description here

有些有趣的事情是我尝试直接使用opencv_createsamples(上面)和提供heredirect link)的包装器。 opencv_createsamples结果不理想。它没有检测到样本图像并将其他不相关的对象分类为正面。然而,使用包装器结果稍微好一点,但它只在有白色背景时检测到对象。我不确定为什么使用包装器会产生这种效果,但我的参数或我使用的方式可能不正确。

目录结构:

- positive_images/
    - icon.png
- negative_images/
    - 600 images
- classifier/
- positives.txt
- negatives.txt

0 个答案:

没有答案