mixChannels() giving exception in opencv android

asked 2013-11-13 15:07:35 -0500

I am writing function to find rectangles in Mat. But i am getting exception at mixChannels()function. My code is as follow. Can some one check and tell me what could be wrong in it ?I would also like to know how i can implement gray = gray0 >= (l+1)*255/N; in java or android ?

private void findSqaures(Mat sourceImage){ Vector<point> sqares; Mat pyr,timing ,gry =new Mat(); pyr=new Mat(sourceImage.size(),CvType.CV_8U); timing=new Mat(sourceImage.size(),CvType.CV_8U); int thresh = 50, N = 11; List<mat> grayO=new ArrayList<mat>(); List<mat> timing1=new ArrayList<mat>(); Imgproc.pyrDown(sourceImage, pyr,new Size(sourceImage.cols()/2.0, sourceImage.rows()/2)); Imgproc.pyrUp(pyr, timing,sourceImage.size()); // Vector<point> contours=new Vector<point>(); timing1.add(0,pyr); grayO.add(0,timing); // grayO.add(0,timing); for(int c=0;c<3;c++){ int ch[]={1,0};

        MatOfInt fromto = new MatOfInt(ch);
        Core.mixChannels(timing1, grayO, fromto);

// Core.mixChannels(src, dst, fromTo) for(int i=0;i<n;i++){ mat="" output="grayO.get(0);" if(i="=0){&lt;/p">

                Imgproc.Canny(output, gry, 5, thresh);
                Imgproc.dilate(gry, gry, new Mat(), new Point(-1,-1), 1);
            }
             else {

// output = output >= (i+1)*255/N; } // sourceImage=gry; contours=new ArrayList<matofpoint>(); Imgproc.findContours(gry, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); MatOfPoint2f approxCurve = new MatOfPoint2f(); mDrawnContours.clear(); Log.i(TAG, "::findSqaures:" + "contours.size():"+contours.size()); for(int j=0;i<contours.size();j++){ matofpoint="" tempcontour="contours.get(i);" matofpoint2f="" newmat="new" matofpoint2f(="" tempcontour.toarray()="" );="" int="" contoursize="(int)tempContour.total();&lt;/p">

                Imgproc.approxPolyDP(newMat, approxCurve, contourSize*0.02, true);
                MatOfPoint points=new MatOfPoint(approxCurve.toArray());

// if( approx.size() == 4 && fabs(contourArea(cv::Mat(approx))) > 1000 && cv::isContourConvex(cv::Mat(approx))) { if(points.toArray().length==4 && (Math.abs(approxCurve.total())>1000) && Imgproc.isContourConvex(points)){ double maxCosine=0; int k; for( k=2;k<5;k++){ double cosine=Math.abs(angle(points.toArray()[k%4], points.toArray()[k-2], points.toArray()[k-1])); if(maxCosine>cosine){ maxCosine=cosine; } } Log.i(TAG, "::findSqaures:" + "maxCosine:"+maxCosine); if(maxCosine<0.3){ DrawnContours drawnContours=new DrawnContours(); drawnContours.setIndex(k); mDrawnContours.add(drawnContours);

                    }

                }

            }
            Log.i(TAG, "::findSqaures:" + "mDrawnContours.size():"+mDrawnContours.size());
        }
    }

// Core.mixChannels(src, dst, fromTo)

}

The exception is CvException [org.opencv.core.CvException: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/core/src/matrix.cpp:3210: error: (-215) A.size == arrays[i0]->size in function void cv::NAryMatIterator::init(const cv::Mat, cv::Mat, uchar, int)*

edit retag flag offensive close merge delete