diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java index e2ad12e51c1f8badd6b3e19f8d936637ab1b4f3f..561c53e09d10122dc4909fd5b049119756e4b766 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 4a6fee200f58c87212c33a69125b46ebb25b86e5..18a05d49ad44a52d025f53d3046401b084b9ff04 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 0000000000000000000000000000000000000000..43a56d6418ddfef5011c730fb92770c3d5a511bc --- /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 0000000000000000000000000000000000000000..8d212fe6b6acb326a37eb9b2320b0ff23f39e03b --- /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); +}