package com.DVLA.testapp.app; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.core.MatOfFloat; import org.opencv.core.MatOfInt; import org.opencv.core.MatOfKeyPoint; import org.opencv.core.MatOfPoint; import org.opencv.core.MatOfRect; import org.opencv.core.Point; import org.opencv.core.Rect; import org.opencv.core.Core; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.android.CameraBridgeViewBase; import org.opencv.features2d.KeyPoint; import org.opencv.highgui.Highgui; import org.opencv.imgproc.Imgproc; import org.opencv.features2d.Features2d; import org.opencv.objdetect.*; import android.app.Activity; import android.content.Context; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; import android.util.Log; import android.view.MenuItem; import com.googlecode.tesseract.android.TessBaseAPI; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; public class OpenCV extends Activity { public static final int VIEW_MODE_RGBA = 0; public static final int VIEW_MODE_HIST = 1; public static final int VIEW_MODE_CANNY = 2; public static final int VIEW_MODE_SEPIA = 3; public static final int VIEW_MODE_SOBEL = 4; public static final int VIEW_MODE_ZOOM = 5; public static final int VIEW_MODE_PIXELIZE = 6; public static final int VIEW_MODE_POSTERIZE = 7; private MenuItem mItemPreviewRGBA; private MenuItem mItemPreviewHist; private MenuItem mItemPreviewCanny; private MenuItem mItemPreviewSepia; private MenuItem mItemPreviewSobel; private MenuItem mItemPreviewZoom; private MenuItem mItemPreviewPixelize; private MenuItem mItemPreviewPosterize; private CameraBridgeViewBase mOpenCvCameraView; private Size mSize0; private Mat mIntermediateMat; private Mat mMat0; private MatOfInt mChannels[]; private MatOfInt mHistSize; private int mHistSizeNum = 25; private MatOfFloat mRanges; private Scalar mColorsRGB[]; private Scalar mColorsHue[]; private Scalar mWhilte; private Point mP1; private Point mP2; private float mBuff[]; private Mat mSepiaKernel; public static int viewMode = VIEW_MODE_RGBA; protected Bitmap imgConvert(Bitmap img) { Mat image = new Mat(); Utils.bitmapToMat(img,image); Mat gray_image = new Mat(); Size shrankSize = new Size(); shrankSize.height = 1500; shrankSize.width = (float) shrankSize.height / image.height() * image.width(); if(image.height() > 1500) { Imgproc.resize(image, image, shrankSize);} Imgproc.cvtColor(image,gray_image,Imgproc.COLOR_RGB2GRAY); Imgproc.threshold(gray_image,gray_image,127,255,0); Bitmap bmp = Bitmap.createBitmap(gray_image.width(),gray_image.height(), Bitmap.Config.ARGB_8888); Utils.matToBitmap(gray_image,bmp); return bmp; } static public Bitmap getMini(Bitmap bmp,Integer x,Integer y,Integer w,Integer h) { Mat mat = new Mat(); Bitmap bmp2 = Bitmap.createBitmap(w,h, Bitmap.Config.ARGB_8888); Utils.bitmapToMat(bmp,mat); Mat mat2 = mat.submat(mat.height()-(y+h),mat.height()-y,x,x+w); Utils.matToBitmap(mat2,bmp2); return bmp2; } static public Bitmap drawRect(Bitmap src, List<boxLetter> boxes,Integer offsetX,Integer offsetY){ Mat matSrc = new Mat(); Utils.bitmapToMat(src,matSrc); for(boxLetter box:boxes) { Core.rectangle(matSrc,new Point(offsetX+box.x1,matSrc.height()-(offsetY +box.y1)), new Point(offsetX+box.x2,matSrc.height()-(offsetY+box.y2)),new Scalar(255,0,0),2); } Utils.matToBitmap(matSrc,src); return src; } // Not currently in use. Saved for later. /* public void faceDetection(Mat srcGray, Mat src,String imgLoc,CascadeClassifier cascade) { MatOfRect storage = new MatOfRect(); Log.i("Starting Detection",new DateTime().toString()); cascade.detectMultiScale(srcGray,storage); Log.i("Finished Detection",new DateTime().toString()); int total_Faces = storage.toList().size(); Log.i("Total potential matches",storage.toList().toString()); List<Rect> x = new ArrayList<Rect>(); for(int i = 0; i < total_Faces; i++){ Rect r = storage.toList().get(i); x.add(0,r); } Collections.sort(x,new customCompare()); Integer i = 0; for(i=0;i<x.size();i++){ Rect r = x.get(i); Core.rectangle(src,new Point(r.x,r.y),new Point(r.x+r.width,r.y+r.height),new Scalar(255,0,0),2); } Highgui.imwrite(imgLoc, src); } */ //No Longer Used /* static public Bitmap clearFlatColors(Bitmap src, Integer xMin, Integer xMax) { Mat matSrc = new Mat(); Utils.bitmapToMat(src,matSrc); Integer y = 0; Integer h = matSrc.height(); Integer x = Math.min(xMin, matSrc.width()); Integer w = Math.min(xMax - xMin, matSrc.width()); Integer i,i2; for(i=y; i<h;i++) { Boolean allBlack = true; for(i2=x;i2<w;i2++) { double[] pix = matSrc.get(i,i2); if(pix[0]==255) { allBlack = false;} } if(allBlack == true) { Core.rectangle(matSrc,new Point(0,i),new Point(matSrc.width(),i),new Scalar(255,255,255),1); } } Utils.matToBitmap(matSrc,src); return src; } */ }