Whenever i use Imgproc.rectangle and Imgproc.circle function following error appears
package org.opencv.samples.tutorial1;
import org.opencv.android.BaseLoaderCallback; import org.opencv.android.CameraBridgeViewBase; import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame; import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2; import org.opencv.android.LoaderCallbackInterface; import org.opencv.android.OpenCVLoader; import org.opencv.core.*; //import org.opencv.highgui.Highgui; import org.opencv.imgproc.Imgproc;
import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.MotionEvent; import android.view.SurfaceView; import android.view.View; import android.view.View.OnTouchListener; import android.view.WindowManager;
import com.example.imgloader.R;
import java.util.ArrayList; import java.util.Iterator; import java.util.List;
public class Tutorial1Activity extends Activity implements CvCameraViewListener2 {
private static final String TAG = "OCVSample::Activity";
private Mat mRgba;
private Mat mGray;
private CameraBridgeViewBase mOpenCvCameraView;
Scalar min = new Scalar(0, 30, 60, 0);
Scalar max = new Scalar(20, 150, 255, 0);
Mat pointMatHsv;
Mat heirarchy;
Mat overlay;
private static double mMinContourArea = 0.1;
Mat hullMat;
Scalar CONTOUR_COLOR = new Scalar(255, 0, 0, 255);
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
}
break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
public Tutorial1Activity() {
Log.i(TAG, "Instantiated new " + this.getClass());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "called onCreate");
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.tutorial1_surface_view);
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view);
mOpenCvCameraView.setMaxFrameSize(720, 480);
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
mOpenCvCameraView.setCvCameraViewListener(this);
}
@Override
public void onPause() {
super.onPause();
if (mOpenCvCameraView != null)
mOpenCvCameraView.disableView();
}
@Override
public void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
}
public void onDestroy() {
super.onDestroy();
if (mOpenCvCameraView != null)
mOpenCvCameraView.disableView();
}
public void onCameraViewStarted(int width, int height) {
mGray = new Mat();
mRgba = new Mat();
pointMatHsv = new Mat(1, 1, CvType.CV_8UC3);
heirarchy = new Mat();
overlay = new Mat(1,1, CvType.CV_8UC3);
}
public void onCameraViewStopped() {
}
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
mRgba.copyTo(pointMatHsv);
Scalar CONTOUR_COLOR = new Scalar(255, 0, 0, 255);
Imgproc.cvtColor(pointMatHsv, mGray, Imgproc.COLOR_RGB2HSV);
Core.inRange(mGray, min, max, pointMatHsv);
Imgproc.dilate(pointMatHsv, pointMatHsv, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(2, 2)));
//Imgproc.dilate(mRgba, mRgba, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(2, 2)));
Imgproc.erode(pointMatHsv, pointMatHsv, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(2, 2)));
mGray = retContours(pointMatHsv,mRgba);
return mRgba;
}
public Mat retContours(Mat pointMatHsv, Mat mRgba) {
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
List<MatOfPoint> mContours = new ArrayList<MatOfPoint>();
Imgproc.findContours(pointMatHsv, contours, heirarchy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE);
double maxArea = 0;
Iterator<MatOfPoint> each = contours.iterator();
while (each.hasNext()) {
MatOfPoint wrapper = each.next();
double area = Imgproc.contourArea(wrapper);
if (area > maxArea)
maxArea = area;
}
// Imgproc.cvtColor(pointMatHsv,pointMatHsv,Imgproc.COLOR_HSV2RGB_FULL);
mContours.clear();
each = contours.iterator();
while (each.hasNext()) {
MatOfPoint contour = each.next();
if (Imgproc.contourArea(contour) > mMinContourArea * maxArea) {
// Core.multiply(contour, new Scalar(4, 4), contour);
mContours.add(contour);
}
}
Imgproc.drawContours(mRgba,mContours,-1,new Scalar(0, 255, 0));
for(int i=0;i<mContours.size();i++) {
MatOfPoint currentContour = mContours.get(i);
drawConvexHull(currentContour);
drawBoundingBox(currentContour);
drawEnclosingCircle(currentContour);
}
return mRgba ...
Is it the rectangle in the for loop or the one after it? Is CONTOUR_COLOR a valid input? It looks like you need a Scalar there no matter what version you're using.
yes i have declared a Scalar value for it Scalar CONTOUR_COLOR = new Scalar(255, 0, 0, 255); however i try the rectangle there is same error saying no implementation found
Is it possible that my library does not have the implementation of Rect ?
That is very unlikely. Can you set a breakpoint and see if which of the two calls it's crashing on? You do slightly different things with them. Or check your line numbers and see which one is line 185.
I tried them both and both the time the error is same.