Skip to content
Snippets Groups Projects
Commit 78915107 authored by Nicolas Furquez's avatar Nicolas Furquez
Browse files

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
parent 5baee1b6
No related branches found
No related tags found
No related merge requests found
...@@ -3,12 +3,12 @@ package uy.edu.fing.chesstrack; ...@@ -3,12 +3,12 @@ package uy.edu.fing.chesstrack;
import org.opencv.android.BaseLoaderCallback; import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase; import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener; import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener;
import org.opencv.android.LoaderCallbackInterface; import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader; import org.opencv.android.OpenCVLoader;
import org.opencv.core.Mat; import org.opencv.core.Mat;
import uy.edu.fing.chesstrack.modulovision.Adquisicion;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
...@@ -21,6 +21,8 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener ...@@ -21,6 +21,8 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener
private CameraBridgeViewBase mOpenCvCameraView; private CameraBridgeViewBase mOpenCvCameraView;
private Adquisicion adq;
private final BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { private final BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override @Override
public void onManagerConnected(int status) { public void onManagerConnected(int status) {
...@@ -55,6 +57,7 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener ...@@ -55,6 +57,7 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.chess_track_layout); mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.chess_track_layout);
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
mOpenCvCameraView.setCvCameraViewListener(this); mOpenCvCameraView.setCvCameraViewListener(this);
adq = new Adquisicion();
} }
@Override @Override
...@@ -82,14 +85,12 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener ...@@ -82,14 +85,12 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener
public void onCameraViewStopped() { public void onCameraViewStopped() {
} }
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
return inputFrame.rgba();
}
@Override @Override
public Mat onCameraFrame(Mat inputFrame) { public Mat onCameraFrame(Mat inputFrame) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return adq.processFrame(inputFrame);
} }
} }
package uy.edu.fing.chesstrack.modulovision; 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;
}
} }
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;
}
}
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);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment