顔の検出に関しては、最初にHAAR機能分類器を理解する必要があります。率直に言って、HAAR機能分類器は一連のXMLファイルであり、顔、目など、人体のさまざまな部分の特徴的な値を説明します。次の機能ファイルはOpenCv3.2.0で提供されています。
haarcascade_eye.xml
haarcascade_eye_tree_eyeglasses.xml
haarcascade_frontalcatface.xml
haarcascade_frontalcatface_extended.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_alt_tree.xml
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_default.xml
haarcascade_fullbody.xml
haarcascade_lefteye_2splits.xml
haarcascade_licence_plate_rus_16stages.xml
haarcascade_lowerbody.xml
haarcascade_profileface.xml
haarcascade_righteye_2splits.xml
haarcascade_russian_plate_number.xml
haarcascade_smile.xml
haarcascade_upperbody.xml
さまざまな機能ファイルをロードすることにより、対応する検出効果を達成できます。
Opencv3.2.0のDetectMultiscale関数パラメーターの説明:
DetectMultiscale(MAT Image、MatoFRECTオブジェクト、Double ScaleFactor、Int Minneighbors、Int Flags、Size Minsize、Size Maxsize)
画像:検出される画像は一般にグレースケールです(効率の向上)
オブジェクト:検出されたオブジェクトの長方形のボックスベクトルグループ
ScaleFactor:2回の連続したスキャンでの検索ウィンドウのスケール係数。デフォルトは1.1です。つまり、各検索ウィンドウは順番に10%展開されます。
Minneighbors:検出ターゲットを構成する隣接する長方形の最小数(デフォルトは3)
フラグ:デフォルト値を使用するか、CV_HAAR_DO_CANNY_PRUNINGを使用します。 CV_HAAR_DO_CANNY_PRUNINGに設定すると、機能はCanny Edge検出を使用して、エッジが多すぎるか少なすぎるエリアを除外するため、これらの領域は通常、顔がある領域ではありません。
Minsize:得られたターゲット領域の最小範囲
Maxsize:得られたターゲット領域の最大範囲
顔検出サンプルコード:
Import org.opencv.core.core; Import org.opencv.core.mat; Import org.opencv.core.matofrect; Import org.opencv.core.point; import org.opencv.core.rect; Import org.opencv.core.scalar; Import org.opencv.imgcodecs.imgces org.opencv.imgproc.imgproc; import org.opencv.objdetect.cascadeclassifier; public class facedetect {public static void main(string [] args){// todo auto generated method stibe.loadlibrary(core.native_library_name); system.out.println( "/nrunning facedetector"); cascadeclassifier faceDeTector = new cascadeclassifier(); faceDeTector.load( "C://プログラムファイル// opencv // sources // data // haarcascades // haarcascades // haarcascades_frontalface_alt.xml"); MAT IMAGE = IMGCODECS.IMREAD( "f://1114.jpg"); matoFRECT FACEDETECTIONS = new MatofRect(); FACEDETECTOR.DETECTMULTISCALE(画像、FACEDETECTIONS); system.out.println(string.format( "検出された%s faces"、facedeTections.toarray()。長さ)); for(rect rect:facedetections.toarray()){imgproc.rectangle(image、new point(rect.x、rect.y)、new Point(rect.x + rect.width、rect.y + rect.height)、new Scalar(0、255、0)); }文字列filename = "f://ouput.jpg"; imgcodecs.imwrite(filename、image); }}ソース画像と結果図:
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。