如何在OpenCV中训练两个具有不同尺寸的对象

how to train two objects with different sizes in openCv

本文关键字:两个 对象 OpenCV      更新时间:2023-10-16

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

我有一个235张图像阳性和300个负面图像。

对于正面图像,车牌车的实际尺寸为40厘米x 13厘米,车牌摩托车具有实际尺寸20 cm x 17 cm。当尝试分别训练向量时,该软件正常工作,但是当我尝试使用两个板训练时,该软件不起作用。

这是使用的培训守则。

此代码与车牌车使用,但与车牌摩托车无效

createsamples -info c:harrkitHAARKITV10povitivosinfo.txt -vec vetorveiculos_64x24.vec -num 235 -w 64 -h 24
trainCascade -data cascade -vec c:harrkitHAARKITV10vetorveiculos_64x24.vec -bg c:harrkitHAARKITV10negativosnegativos.txt -numPos 235 -numNeg 200 -numStages 12  -featureTyp HAAR -minHitRate 0.999 -maxFalseAlarmRate 0.5 -w 64 -h 24

//检测持续代码

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!");
            }

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

您的问题可能来自 createsamples

中的h之前缺少的负号

尝试以下内容:

createsamples -info c:harrkitHAARKITV10povitivosinfo.txt -vec vetorveiculos_64x24.vec -num 235 -w 64 -h 24

它应该起作用,因为 createsamples固定宽度和高度的阳性集合(64x64)。

您必须更改" H"answers" W"参数才能训练第二种类型的对象,这些参数可能会导致问题,尤其是当它们与对象的大小不匹配时。另外,您可以放置控制台吗,我们必须查看您的错误才能找出问题的起源!