0

How can I convert List<MatOfPoint> contours to Rect[] contoursArray, so that I can use Core.rectangle(mRgba, contoursArray[i].tl(), contoursArray[i].br(), (255,0,0,255), 3) to draw a rectangle on it?

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    mRgba = inputFrame.rgba();
    mGray = inputFrame.gray();
    //Touch screen to track by color and draw rectangle on it
    if (mItem_select && Color_Select){
        mDetector.process(mRgba);
        List < MatOfPoint > contours = mDetector.getContours();
        Log.e(TAG, "Contours count: " + contours.size());
        Imgproc.drawContours(mRgba, contours, - 1, Rectangle_Color);
        //Draw rectangle on it
        Rect[] contoursArray = contours.toArray(); //error:Type mismatch: cannot convert from Object[] to Rect[]
        Core.rectangle(mRgba, contoursArray.tl(), contoursArray.br(), (255, 0, 0, 255), 3); //error:Cannot invoke tl() on the array type Rect[]、Cannot invoke br() on the array type Rect[]

        Mat colorLabel = mRgba.submat(4, 68, 4, 68);
        colorLabel.setTo(mBlobColorRgba);
        Mat spectrumLabel = mRgba.submat(4, 4 + mSpectrum.rows(), 70, 70 + mSpectrum.cols());
        mSpectrum.copyTo(spectrumLabel);
    }
    return mRgba;
}
2

2 Answers 2

2

Try this to draw rectangles on countours

MatOfPoint2f approxCurve = new MatOfPoint2f();

        //For each contour found
        for (int i=0; i<contours.size(); i++)
        {
            //Convert contours(i) from MatOfPoint to MatOfPoint2f
            MatOfPoint2f contour2f = new MatOfPoint2f( contours.get(i).toArray() );
            //Processing on mMOP2f1 which is in type MatOfPoint2f
            double approxDistance = Imgproc.arcLength(contour2f, true)*0.02;
            Imgproc.approxPolyDP(contour2f, approxCurve, approxDistance, true);

            //Convert back to MatOfPoint
            MatOfPoint points = new MatOfPoint( approxCurve.toArray() );

            // Get bounding rect of contour
            Rect rect = Imgproc.boundingRect(points);

             // draw enclosing rectangle (all same color, but you could use variable i to make them unique)
           Point(rect.x+rect.width,rect.y+rect.height) , new Scalar(255, 0, 0, 255), 3); 
        }
0

Very similar question and working answer provided here: http://answers.opencv.org/question/25755/drawing-bounding-box-in-java/

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.