加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – cvHaarDetectObjects()方法有什么作用?

发布时间:2020-12-14 06:04:46 所属栏目:Java 来源:网络整理
导读:有些专家可以解释一下我是否可以使用cvHaarDetectObjects()方法来检测方块并获得宽度和高度?我找到了一个使用这种方法进行面部检测的代码,但我需要知道是否可以将它用于矩形检测. String src="src/squiredetection/MY.JPG"; IplImage grabbedImage = cvLoad
有些专家可以解释一下我是否可以使用cvHaarDetectObjects()方法来检测方块并获得宽度和高度?我找到了一个使用这种方法进行面部检测的代码,但我需要知道是否可以将它用于矩形检测.
String src="src/squiredetection/MY.JPG";
    IplImage grabbedImage = cvLoadImage(src);
    IplImage grayImage    = IplImage.create(grabbedImage.width(),grabbedImage.height(),IPL_DEPTH_8U,1);

        cvCvtColor(grabbedImage,grayImage,CV_BGR2GRAY);

        CvSeq faces = cvHaarDetectObjects(grayImage,cascade,storage,1.1,3,0);//*
        for (int i = 0; i < faces.total(); i++) {
            CvRect r = new CvRect(cvGetSeqElem(faces,i));
            cvRectangle(grabbedImage,cvPoint(r.x(),r.y()),cvPoint(r.x()+r.width(),r.y()+r.height()),CvScalar.RED,1,CV_AA,0);
         /*   hatPoints[0].x = r.x-r.width/10;    hatPoints[0].y = r.y-r.height/10;
            hatPoints[1].x = r.x+r.width*11/10; hatPoints[1].y = r.y-r.height/10;
            hatPoints[2].x = r.x+r.width/2;     hatPoints[2].y = r.y-r.height/2;*/
          //  cvFillConvexPoly(grabbedImage,hatPoints,hatPoints.length,CvScalar.GREEN,0);
        }

当我使用上面的方法时,它抛出以下异常

OpenCV Error: Bad argument (Invalid classifier cascade) in unknown function,file C:slaveWinInstallerMegaPacksrcopencvmodulesobjdetectsrchaar.cpp,line 1036
Exception in thread "main" java.lang.RuntimeException: C:slaveWinInstallerMegaPacksrcopencvmodulesobjdetectsrchaar.cpp:1036: error: (-5) Invalid classifier cascade

    at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(Native Method)
    at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(opencv_objdetect.java:243)
    at squiredetection.Test2.main(Test2.java:52 I have put * on this line)

请善意为此提供简单的代码示例.

解决方法

cvHaarDetectObjects()不仅用于检测面部的对象或形状,还取决于HaarCascade分类器.

如果你传递face haarcascade xml然后它将返回一个面数组或者也可以使用眼睛,鼻子等HaarCascade XML文件.您还可以使用opencv_traincascade.exe创建自己的正面和负面样本,以制作自定义haarcascade xml

CvSeq faces = cvHaarDetectObjects(grayImage,classifier,CV_HAAR_DO_CANNY_PRUNING);

for (int i = 0; i < faces.total(); i++) {
   // its ok
}

细节opencv doc

用于矩形检测:

there is an example for rectangle detection in OpenCV,they use it to detect
the squares in a chessboard. Have a look to squares.c in
..OpenCVsamplesc directory.

见这个chessboard detection sample in opencv

未知函数错误中的无效分类器级联意味着您传递的分类器格式不正确或缺少某些内容.检查分类器xml文件是否有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读