如何在openCv中训练两个不同大小的物体

时间:2015-05-06 15:10:48

标签: java android c++ opencv

我尝试用OpenCv版本2.4.10训练车牌和车牌摩托车。

我有235张正片和300张负片。

对于正面图像,车牌实际尺寸为40厘米x 13厘米,车牌摩托车的实际尺寸为20厘米x 17厘米。 当试图单独训练向量时,软件工作正常,但当我尝试使用这两个板进行训练时,该软件无效。

以下是使用的培训代码。

此代码适用于车牌,但不适用于车牌摩托车

createsamples -info c:\harrkit\HAARKITV10\povitivos\info.txt -vec vetor\veiculos_64x24.vec -num 235 -w 64 -h 24
trainCascade -data cascade -vec c:\harrkit\HAARKITV10\vetor\veiculos_64x24.vec -bg c:\harrkit\HAARKITV10\negativos\negativos.txt -numPos 235 -numNeg 200 -numStages 12  -featureTyp HAAR -minHitRate 0.999 -maxFalseAlarmRate 0.5 -w 64 -h 24

// detectMultiScale code

if (mAbsolutePlateSize == 0) {
                int height = mGray.rows();
                if (Math.round(height * mRelativePlateSize) > 0) {
                    mAbsolutePlateSize = Math.round(height * mRelativePlateSize);
                }
                mNativeDetector.setMinFaceSize(mAbsolutePlateSize);
            }

            MatOfRect mMatPlacas = new MatOfRect();

            if (mDetectorType == JAVA_DETECTOR) {
                if (mJavaDetector != null)
                    mJavaDetector.detectMultiScale(mGray, mMatPlacas, 1.1, 2, 2, new Size(mAbsolutePlateSize, mAbsolutePlateSize), new Size()); 
            } else if (mDetectorType == NATIVE_DETECTOR) {
                if (mNativeDetector != null)
                    mNativeDetector.detect(mGray, mMatPlacas);
            } else {
                Log.e(TAG, "Detection method is not selected!");
            }

3 个答案:

答案 0 :(得分:1)

由于这两种类型的板具有不同的纵横比,您可以尝试为每种类型训练不同的分类器。在纸面上,这更准确。

答案 1 :(得分:0)

您的问题可能来自h

createsamples之前遗漏的减号

尝试以下方法:

createsamples -info c:\harrkit\HAARKITV10\povitivos\info.txt -vec vetor\veiculos_64x24.vec -num 235 -w 64 -h 24

它应该有效,因为createsamples具有固定宽度和高度(64x64)的正面集合。

答案 2 :(得分:0)

您必须更改“h”和“w”参数以训练第二种类型的对象,这些参数可能会导致问题,尤其是如果它们与对象的大小不匹配。 此外,你可以把你的控制台,我们必须看看你的错误,找出你的问题的根源!