
haarcascade_frontalface_default.xmlhaarcascade_frontalface_alt.xmlhaarcascade_frontalface_alt2.xmlhaarcascade_frontalface_alt_tree.xml
“默认”haarcascade给出了太多误报并且根本不好,而’alt’,’alt2’和’tree’级联似乎产生了相当准确但有时不同的结果. ‘tree’级联倾向于产生比’alt’和’alt2’更多的假阴性,但也是最少的误报.
问题是这些haarcascade xml文件有两种不同的格式.
首先是这样的:https://github.com/Danukeru/FOUCAM/blob/master/haarcascade_frontalface.xml
第二个是这样的:https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_frontalface_alt.xml
如果我没有弄错,第二个被认为是“新”格式,但我的应用程序目前只能理解第一个“旧”格式. “新”级联可能更准确,我想尝试一下.
有没有办法将新格式级联转换为旧格式?
或者我如何在我的应用程序中使用它们?
以下是一些代码(来自sites.Google.com/site/josejp1/index/OCV.ZIP):
f1 := 'haarcascade_frontalface_alt.xml';file1 := PChar(f1);cascade_f := cvLoad(file1,0);storage := cvCreateMemStorage(0);s.wIDth := 40;s.height := 40;faces := cvHaarDetectObjects(PCvArr(img),cascade_f,storage,1.1,3,s);
如果我尝试使用’新’格式的xml级联文件,我会收到一个错误:
OpenCV GUI Error Handler---------------------------UnspecifIEd error (The node does not represent a user object (unkNown type?))in function cvRead,..\..\cxcore\src\cxpersistence.cpp(5061)
我没有在Delphi中找到任何带有新C API的现成例子,所以我将this example of detectMultiScale (a C++ version of cvHaarDetectObjects)转换为Delphi.它会在尝试加载级联时编译但崩溃.我是C新手所以任何帮助将不胜感激.
Delphi 2010 project in zip archive
unit Unit1;interfaceuses windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ExtCtrls,DateUtils,ExtDlgs,highgui_c,core_c,Core.types_c,imgproc_c,imgproc.types_c,objdetect;type TForm1 = class(TForm) Image1: timage; button2: Tbutton; Label1: TLabel; Memo1: TMemo; procedure button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; mystorage: pCvMemStorage = nil; mycascade : pCvHaarClassifIErCascade = nil; mycascade_name: AnsiString = 'cascades\haarcascade_frontalface_alt.xml';implementation{$R *.dfm}procedure TForm1.button2Click(Sender: TObject);var img,grayImage : PIplimage; myobjects : TArray<TCvRect>; myscale : double; i: integer; r: pCvRect; mycolors : array[0..7] of TCvScalar; myCascadeClassifIEr : TCascadeClassifIEr;begin mycolors[0] := CvScalar(0,255); mycolors[1] := CvScalar(0,128,255); mycolors[2] := CvScalar(0,255,255); mycolors[3] := CvScalar(0,0); mycolors[4] := CvScalar(255,0); mycolors[5] := CvScalar(255,0); mycolors[6] := CvScalar(255,0); mycolors[7] := CvScalar(255,255); img := cvLoadImage('lena.jpg'); grayImage := cvCreateImage(cvGetSize(img),8,1); cvCvtcolor(img,grayImage,CV_BGR2GRAY); cvShowImage('gray',grayImage); mystorage := cvCreateMemStorage(0); Memo1.lines.Add('Memory allocated'); mycascade := cvLoad('cascade.xml'); myscale := 1.3; cvClearMemStorage(mystorage); myobjects := nil; myCascadeClassifIEr.detectMultiScale(grayImage,myobjects,CV_HAAR_SCALE_IMAGE or CV_HAAR_DO_CANNY_PRUNING,cvSize(0,0),cvSize(40,40)); Memo1.lines.Add('Object size? : ' + IntToStr(Length(myobjects))); for i := 0 to (Length(myobjects)-1) do begin cvRectangle(grayImage,cvPoint(r.x,r.y),cvPoint(r.x+r.wIDth,r.y+r.height),CvScalar(0,255)); end; cvnameDWindow('Output'); cvShowImage('Output',grayImage); cvReleaseImage(grayImage); cvReleaseImage(img);end;end. @TLama:我正在使用最新版本的Delphi-OpenCV用于带有detectMultiScale的项目,以及第一个项目中使用cvHaarDetectObjects的第一个项目的一些过时(但工作)版本(sites.Google.com/site/josejp1/ / OCV.ZIP)指数.
解决方法 如果这些delphi绑定使用过时的c-API,(cvHaarDetectObjects) – 你只能使用旧的格式.c API(cv :: CascadeClassifIEr)支持这两种,以及hog和lbp级联.
再次,它是旧c-API的限制.如果可以的话,避免它!
总结以上是内存溢出为你收集整理的delphi – OpenCV Haar Cascade xml格式全部内容,希望文章能够帮你解决delphi – OpenCV Haar Cascade xml格式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)