From 7891510726b923bd7f1d53571f77ef74ded3e7b6 Mon Sep 17 00:00:00 2001 From: nfurquez <nfurquez@fing.edu.uy> Date: Mon, 7 Jul 2014 20:59:50 -0300 Subject: [PATCH] Se genera la apk para que modifique la imagen de entrada y la pase a escala de grises, haciendo una equalizacion de histograma aplicando la idea del prototipo --- .../fing/chesstrack/ChessTrackActivity.java | 11 ++-- .../chesstrack/modulovision/Adquisicion.java | 66 ++++++++++++++++++- .../modulovision/imgproc/EcualizarImagen.java | 19 ++++++ .../imgproc/ImgProcInterface.java | 12 ++++ 4 files changed, 102 insertions(+), 6 deletions(-) create mode 100644 ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/EcualizarImagen.java create mode 100644 ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/ImgProcInterface.java diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java index e2ad12e..561c53e 100644 --- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java +++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java @@ -3,12 +3,12 @@ package uy.edu.fing.chesstrack; import org.opencv.android.BaseLoaderCallback; import org.opencv.android.CameraBridgeViewBase; -import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame; import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener; import org.opencv.android.LoaderCallbackInterface; import org.opencv.android.OpenCVLoader; import org.opencv.core.Mat; +import uy.edu.fing.chesstrack.modulovision.Adquisicion; import android.app.Activity; import android.os.Bundle; import android.util.Log; @@ -21,6 +21,8 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener private CameraBridgeViewBase mOpenCvCameraView; + private Adquisicion adq; + private final BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { @@ -55,6 +57,7 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.chess_track_layout); mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); mOpenCvCameraView.setCvCameraViewListener(this); + adq = new Adquisicion(); } @Override @@ -82,14 +85,12 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener public void onCameraViewStopped() { } - public Mat onCameraFrame(CvCameraViewFrame inputFrame) { - return inputFrame.rgba(); - } + @Override public Mat onCameraFrame(Mat inputFrame) { // TODO Auto-generated method stub - return null; + return adq.processFrame(inputFrame); } } diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Adquisicion.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Adquisicion.java index 4a6fee2..18a05d4 100644 --- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Adquisicion.java +++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Adquisicion.java @@ -1,6 +1,70 @@ package uy.edu.fing.chesstrack.modulovision; -public class Adquisicion { +import java.util.ArrayList; +import java.util.List; + +import org.opencv.core.Mat; + +import uy.edu.fing.chesstrack.modulovision.imgproc.EcualizarImagen; +import uy.edu.fing.chesstrack.modulovision.imgproc.ImgProcInterface; +import android.util.Log; + + + +public class Adquisicion { + List<ImgProcInterface> listProc; + + private static final String TAG = "CHESSTRACK::Adquisicion"; + + + public Adquisicion() { + super(); + Log.i(TAG, "Cargado...."); + listProc = new ArrayList<ImgProcInterface>(); + listProc.add( new EcualizarImagen()); + } + + /** + * PRocesa el frame pasado por parametro + * @param inputPicture + * @return + * ver http://dsp.stackexchange.com/questions/2805/how-does-opencv-find-chessboard-corners + * http://www.cvg.ethz.ch/teaching/2012fall/cvl/Tutorial-OpenCV.pdf + */ + public synchronized Mat processFrame(Mat inputPicture) { + Log.i(TAG, "processFrame inicia"); + Mat salida = inputPicture; + // + // // Core.line(salida, new Point(0, 5), new Point(salida.cols()/2,salida.rows()/2), new Scalar(0, 255, 0, 255), 3); + // + // // Core.circle(salida, new Point(salida.cols()/2,salida.rows()/2), 120, new Scalar(0,0 , 255, 255)); + // + // MatOfPoint2f pointBuf; + // boolean found = Calib3d.findChessboardCorners( salida, salida.size(), pointBuf, + // Calib3d.CALIB_CB_ADAPTIVE_THRESH |Calib3d.CALIB_CB_FAST_CHECK | Calib3d.CALIB_CB_NORMALIZE_IMAGE); + // if (found){ + // Mat viewGray; + // Imgproc.cvtColor(salida, viewGray, Imgproc.COLOR_BGR2GRAY); + // cornerSubPix( viewGray, pointBuf, new Size(11,11), + // new Size(-1,-1), TermCriteria( TermCriteria.TERMCRIT_EPS+TermCriteria.TERMCRIT_ITER, 30, 0.1 )); + // + // + // + // MatOfPoint2f corners = new MatOfPoint2f(); + // Imgproc.cornerSubPix(image, corners , winSize, zeroZone, criteria); + // Calib3d.drawChessboardCorners(salida, new Size(5, 5), corners, patternWasFound); + // } + + Mat prevImg = inputPicture; + + for (ImgProcInterface proc: listProc){ + prevImg = proc.procesarImagen(prevImg); + } + + + return prevImg; + + } } diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/EcualizarImagen.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/EcualizarImagen.java new file mode 100644 index 0000000..43a56d6 --- /dev/null +++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/EcualizarImagen.java @@ -0,0 +1,19 @@ +package uy.edu.fing.chesstrack.modulovision.imgproc; + +import org.opencv.core.Mat; +import org.opencv.imgproc.Imgproc; + +public class EcualizarImagen implements ImgProcInterface { + + @Override + public Mat procesarImagen(Mat inputFrame) { + // TODO Auto-generated method stub + //cvEqualizeHist(src,dest) + Mat viewGray = new Mat(); + Imgproc.cvtColor(inputFrame, viewGray, Imgproc.COLOR_BGR2GRAY); + Imgproc.equalizeHist(viewGray,viewGray); + //Imgproc.equalizeHist(inputFrame,inputFrame); + return viewGray; + } + +} diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/ImgProcInterface.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/ImgProcInterface.java new file mode 100644 index 0000000..8d212fe --- /dev/null +++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/ImgProcInterface.java @@ -0,0 +1,12 @@ +package uy.edu.fing.chesstrack.modulovision.imgproc; + +import org.opencv.core.Mat; + +/* + * Las clases para procesar las imagenes deben de implementar + * esta interface y recibiran una imagen que puede haber sido + * por otra clase en un paso previo + */ +public interface ImgProcInterface { + abstract Mat procesarImagen(Mat inputFrame); +} -- GitLab