本文实例为大家分享了 Javacv , , , , 具体内容如下
/ * * Copyright (c) 2010.2011,2012 Samuel Audet * * FacePreview - Uma fusão das amostras de FaceEtect do OpenCV e CameraPreview do Android, * com Javacv + Javacpp como a cola no meio. * * Este arquivo foi baseado no camerapreview.java, que acompanha as amostras para * Android SDK API 8, Revisão 1 e continha o seguinte aviso de direitos autorais: * * Copyright (c) 2007 O projeto de código aberto do Android * * licenciado sob a licença Apache, versão 2.0 (a "Licença"); * Você não pode usar esse arquivo, exceto em conformidade com a licença. * Você pode obter uma cópia da licença em * * http://www.apache.org/license/license-2.0 * *, a menos que exigido pela lei aplicável ou acordada por escrito, o software * distribuído sob a licença seja distribuído em uma base "como é" *, sem garantia ou condição de qualquer tipo, seja expresso ou implícito. * Consulte a licença para as permissões e limitações do idioma específico e * sob a licença. * * * IMPORTANTE - Verifique se o arquivo AndroidManifest.xml se parece com o seguinte: * * <? Xml versão = "1.0" Encoding = "utf-8"?> * <Manifest xmlns: Android = "http://schemas.android.apk/res/android" * package.kemas.android.com/apk/res/android " * package/spacko.kemas.android.com/apk/res/android" * package/package/schemas.android.com/apk/res/android " * package.kemas.android.com/apk/res/android" * package/spacke.kemas.android.com/apk/res/android " * package.kemas. Android: versionCode = "1" * Android: versionName = "1.0"> * <usa-sdk Android: minsdkversion = "4" /> * <usa-permission Android: name = "Android.Permission.camera" /> <usa-fature Android: name = "Android.hard.hard.hard.camera" /> <usa-fate Android: name = "Android.hard.hard.hard.camera" * * usa " * * name =" Android.hard.hard.hard.camera " * * usa" * * *. Android: Label = "@String/App_Name"> * <Atividade * Android: name = "FacePreview" * Android: Label = "@String/App_Name" * Android: Screenorientation = "Landscape"> * <Intent-Filter> * <Ação Andro: Name = "Android.intent.Main. Android: name = "Android.Intent.Category.Launcher"/> * </intent-filter> * </tiviltion> * </application> * </manifesto> */package com.googlecode.javacv.facePreview; importar Android.App.Activity; importar android.app.alertdialog; importar android.content.context; importar android.graphics.canvas; importar Android.graphics.color; importar Android.graphics.ImageFormat; importar android.graphics.paint; importar android.hardware.camera; importar Android.hardware.camera.size; importar android.os.bundle; importar android.view.surfaceholder; importar android.view.surfaceView; importar Android.View.View; importar Android.View.Window; importar Android.View.WindowManager; importar android.widget.framelayout; importar java.io.file; importar java.io.ioException; importar java.nio.byteBuffer; importar java.util.list; importar com.googlecode.javacpp.loader; importar com.googlecode.javacv.cpp.opencv_objdetect; importar com.GOOGLECODE.JAVACV.CPP.CPP.CORE. importar com.googlecode.javacv.cpp.opencv_imgproc.*; importar com.googlecode.javacv.cpp.opencv_objdetect.*; importar com.googlecode.javacv.cpp.opencv_highgui.*; // ------------------------------------------------------------------------ Public Class FacePreview estende a atividade {Private Framelayout Layout; FaceView privado FaceView; visualização privada mpreview; @Override Protected void onCreate (pacote savedInstancestate) {// Ocultar o título da janela. requestWindowFeature (window.feature_no_title); super.oCreate (savedInstancestate); getwindow (). addflags (windowmanager.layoutparams.flag_fullscreen); // Crie nossa visualização de visualização e defina -a como o conteúdo de nossa atividade. tente {layout = new Framelayout (this); faceView = new FaceView (this); mPreview = nova visualização (this, faceview); layout.addview (mPreview); layout.addview (faceview); setContentView (layout); } catch (ioexception e) {e.printStackTrace (); novo alertdialog.builder (this) .setMessage (e.getMessage ()). create (). show (); }}} // ----------------------------------------------------------------------- classe Faceview Extlende a exibição de implementos Camera.PreviewCallback {public static final int subsampling_factor = 4; Iplimage privado Grayimage; Classificador privado cvhaarclassifierCascade; armazenamento privado de cvmemstorage; Faces privados de CVSEQ; public FaceView (FacePreview Context) lança IoException {super (contexto); // Carregue o arquivo de classificador da Java Resources. Arquivo ClassifierFile = carregador.extractResource (getClass (), "/com/googlecode/javacv/facepreview/haarcascade_frontalface_alt2.xml", context.getcachedir (), "classificador", ".xml"); if (ClassifierFile == NULL || ClassifierFile.Length () <= 0) {THROW NOVA IOException ("Não foi possível extrair o arquivo classificador do Java Recurso."); } // pré -carregue o módulo OpenCV_OBJDETECT para contornar um bug conhecido. Carregador.load (opencv_objdetect.class); classificador = novo cvhaarclassifierCascade (cvload (classificierfile.getabsolutepath ())); ClassifierFile.Delete (); if (Classifier.isnull ()) {lança a nova ioexception ("não pudesse carregar o arquivo de classificador."); } armazenamento = cvmemStorage.create (); } public void onpreviewFrame (dados final byte [], câmera final) {try {camera.size size = câmera.getParameters (). getPreviewSize (); Processimage (dados, size.width, size.Height); câmera.addcallbackbuffer (dados); } Catch (RunTimeException e) {// A câmera provavelmente acabou de ser lançada, ignore. }} Proteged void Processimage (dados byte [], int largura, int altura) {// Primeiro, diminui nossa imagem e converta -os em um iplimage em escala de cinza int f = submampling_actor; if (GrayImage == null || GrayImage.width ()! = width/f || GrayImage.Height ()! } int imageWidth = GrayImage.width (); int imageHeight = GrayImage.Height (); int dATASTRIDE = f*largura; int imagestride = GrayImage.widthstep (); Bytebuffer imageBuffer = GrayImage.getByteBuffer (); for (int y = 0; y <imageHeight; y ++) {int dataline = y*datastide; int imageine = y*imagestride; for (int x = 0; x <imagewidth; x ++) {imageBuffer.put (imageline + x, dados [dataline + f*x]); }} IPlimage GrayImaget = iPlimage.create (altura/f, largura/f, ipl_depth_8u, 1); //cvSaveImage("/storage/emuled/0/pictures/grayimage.jpg",grayimage); cvTranspose (Grayimage, Grayimaget); //cvSaveImage("/storage/emuled/0/pictures/grayimaget.jpg",grayimaget); cvflip (Grayimaget, Grayimaget, 0); //cvSaveImage("/storage/emuled/0/pictures/grayimaget_x.jpg",grayimaget); cvflip (Grayimaget, Grayimaget, 1); //cvSaveImage("/storage/emuled/0/pictures/grayimaget_y.jpg",grayimaget); cvclearMemStorage (armazenamento); faces = cvhaardEtectObjects (GrayImaget, Classifier, Storage, 1.1, 3, CV_HAAR_DO_CANNY_PRUNING); PostInvalidate (); } @Override Protected void ONDRAW (tela de tela) {tinta tinta = new Paint (); Paint.setColor (color.red); Paint.SettextSize (20); String S = "FacePreview - este lado para cima."; Float TextWidth = Paint.measureTeText (s); Canvas.DrawText (s, (getWidth ()-textwidth)/2, 20, tinta); if (faces! = null) {pintur.SetStrokeWidth (2); Paint.setStyle (Paint.style.stroke); float scalex = (float) getWidth ()/GrayImage.width (); float scaley = (float) getHeight ()/GrayImage.Height (); int total = faces.total (); for (int i = 0; i <total; i ++) {cvrect r = new cvrect (cvgetSeqelem (faces, i)); int x = rx (), y = ry (), w = r.width (), h = r.Height (); canvas.drawrect (x*scalex, y*scaley, (x+w)*scalex, (y+h)*scaley, tinta); }} else {Canvas.DrawText ("MeiyoujiAcDao", (getwidth ()-textwidth)/2, 20, tinta); }}} // ------------------------------------------- Câmera Mcamera; Camera.PreviewCallback VisuewCallback; Visualizar (contexto de contexto, câmera.PreviewCallback VisuewCallback) {super (contexto); this.PreViewCallback = VisuewCallback; // Instale um titular da superfície. Mholder = Getholder (); Mholder.addcallback (isto); Mholder.setType (SurfaceHolder.surface_type_push_buffers); } public void surfacecreated (titular do titular da superfície) {// A superfície foi criada, adquira a câmera e diga onde // para desenhar. mcamera = câmera.open (câmera.camerainfo.camera_facing_front); tente {mcamera.setPreviewDisplay (titular); } catch (exceção da ioexception) {mcamera.release (); mcamera = nulo; // TODO: Adicione mais lógica de manuseio de exceção aqui}} public void Surfacedestroyed (titular do titular da superfície) {// A superfície será destruída quando retornarmos, então pare a visualização. // Como o objeto Cameradevice não é um recurso compartilhado, é muito // importante liberá -lo quando a atividade é pausada. mcamera.stopPreview (); mcamera.release (); mcamera = nulo; } tamanho privado getOptimalPreviewSize (list <size> tamanhos, int w, int h) {final duplo aspecto_tolerance = 0,05; Double TargetRatio = (duplo) w / h; if (tamanhos == null) retorna nulo; Tamanho otimalsize = nulo; Double Mindiff = Double.max_value; int targetHeight = h; // Tente encontrar uma proporção de correspondência de tamanho e tamanho para (tamanho do tamanho: tamanhos) {razão dupla = (duplo) size.width / size.Height; if (Math.abs (proporção - TargetRatio)> aspecto_tolerância) continuar; if (Math.abs (size.Height - TargetHeight) <Mindiff) {otimalsize = size; Mindiff = Math.abs (size.Height - TargetHeight); }} // Não consegue encontrar o único correspondente à proporção, ignore o requisito se (otimalsize == null) {Mindiff = Double.max_value; para (tamanho do tamanho: tamanhos) {if (Math.abs (size.Height - TargetHeight) <Mindiff) {Optimalsize = size; Mindiff = Math.abs (size.Height - TargetHeight); }}} retornar otimalsize; } public void Surfacechanged (titular do titular da superfície, formato int, int w, int h) {// Agora que o tamanho é conhecido, configure os parâmetros da câmera e comece // a visualização. Câmera.parameters parâmetros = mcamera.getParameters (); Lista <Sizer> tamanhos = parâmetros.getSupportedPreviewsesizes (); Tamanho otimalsize = getOptimalPreviewSize (tamanhos, w, h); parameters.setPreviewsize (otimalsize.width, otimalsize.Height); mcamera.setParameters (parâmetros); if (previewCallback! = null) {mcamera.setPreviewCallbackwithBuffer (visualizeCallback); Câmera.size size = parameters.getPreviewSize (); byte [] data = new Byte [size.width* size.Height* imageFormat.getBitsperpixel (parameters.getpreviewformat ())/8]; mcamera.addcallbackbuffer (dados); } mcamera.startPreview (); }}以上就是本文的全部内容 , 希望对大家的学习有所帮助 , 也希望大家多多支持武林网。