/* ---------------------------------------------- --- Author : Ahmet Özlü --- Mail : ahmetozlu93@gmail.com --- Date : 1st August 2017 ---------------------------------------------- */ package src.main; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import org.opencv.android.BaseLoaderCallback; import org.opencv.android.CameraBridgeViewBase; import org.opencv.android.JavaCameraView; import org.opencv.android.OpenCVLoader; import org.opencv.core.Mat; import org.opencv.core.Point; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.imgproc.Imgproc; public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 { public static final String TAG = "src"; static { if (!OpenCVLoader.initDebug()) { Log.wtf(TAG, "OpenCV failed to load!"); } } private JavaCameraView cameraView; private BaseLoaderCallback loaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case SUCCESS: Log.i(TAG, "OpenCV loaded successfully"); cameraView.enableView(); break; default: super.onManagerConnected(status); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cameraView = (JavaCameraView) findViewById(R.id.cameraview); cameraView.setCvCameraViewListener(this); //cameraView.setMaxFrameSize(1280, 720); } @Override protected void onResume() { super.onResume(); OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, loaderCallback); } @Override protected void onPause() { super.onPause(); if (cameraView != null) cameraView.disableView(); } @Override public void onCameraViewStarted(int width, int height) { } @Override public void onCameraViewStopped() { } @Override public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) { Mat input = inputFrame.gray(); Mat circles = new Mat(); Imgproc.blur(input, input, new Size(7, 7), new Point(2, 2)); Imgproc.HoughCircles(input, circles, Imgproc.CV_HOUGH_GRADIENT, 2, 100, 100, 90, 0, 1000); Log.i(TAG, String.valueOf("size: " + circles.cols()) + ", " + String.valueOf(circles.rows())); if (circles.cols() > 0) { for (int x=0; x < Math.min(circles.cols(), 5); x++ ) { double circleVec[] = circles.get(0, x); if (circleVec == null) { break; } Point center = new Point((int) circleVec[0], (int) circleVec[1]); int radius = (int) circleVec[2]; Imgproc.circle(input, center, 3, new Scalar(255, 255, 255), 5); Imgproc.circle(input, center, radius, new Scalar(255, 255, 255), 2); } } circles.release(); input.release(); return inputFrame.rgba(); } }