找到最亮的轮廓opencv java

时间:2016-03-13 20:48:33

标签: java android opencv android-studio

我正试图用相机捕捉最亮的区域。

我正在使用opencv和android studio(JAVA)。到目前为止,关于java的opencv资源和文档有限。

我是一名新手程序员,所以任何建议都会有所帮助。

尝试调试我的代码,但似乎无法像代码那样超越这个代码

Core.MinMaxLocResult max = minMaxLoc(wrapper);

有谁知道如何在JAVA中正确使用MinMaxLocResult函数?

还有一种更有效的方法来找到帧中最亮的区域吗?

我的代码 ` public Mat onCameraFrame(CvCameraViewFrame inputFrame){

    Log.e(TAG, "on camera frame ");
    Mat mHierarchy = new Mat();
    mGrey = inputFrame.gray();
    mRgba = inputFrame.rgba();
    //find contour

Imgproc.findContours(mGrey,Mcontours,mHierarchy,Imgproc.RETR_EXTERNAL,Imgproc.CHAIN_APPROX_NONE);

    double maxMax=0;
    int num=0;

    for(int x = 0; x < Mcontours.size();x++){
        Mat wrapper = Mcontours.get(x);

        Core.MinMaxLocResult max = minMaxLoc(wrapper); **//error line**

        if(max.maxVal > maxMax){
            maxMax = max.maxVal;
            num = x;
        }
            if(x == Mcontours.size()){
                Imgproc.circle(mGrey,max.maxLoc,5,CONTOUR_COLOR);
                Imgproc.drawContours(mGrey,Mcontours,num,CONTOUR_COLOR);
            }

    }

返回mGrey } `

1 个答案:

答案 0 :(得分:1)

如果你想找到最大的轮廓,请查看我的代码:

mContours = new ArrayList<MatOfPoint>();
mObjectContours = new ArrayList<MatOfPoint>();

private void findObjectContour(Mat src) {
    mContours.clear();
    Imgproc.findContours(src, mContours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
    filterContoursArea(mContours);
}

private void filterContoursArea(List<MatOfPoint> mContours) {
    double maxArea = getMaxContourArea(mContours);
    mObjectContours.clear();

    for (int i = 0; i < mContours.size(); i++) {
        MatOfPoint contour = mContours.get(i);
        if (Imgproc.contourArea(contour) > mMinContourArea * maxArea) {
            mObjectContours.add(contour);
        }
    }
}

private double getMaxContourArea(List<MatOfPoint> contours) {
    double maxArea = 0;
    double area;
    for (int i = 0; i < contours.size(); i++) {
        area = Math.abs(Imgproc.contourArea(contours.get(i)));
        if (area > maxArea) {
            maxArea = area;
        }
    }
    return maxArea;
}

private int calculateMaxContourAreaIdx(List<MatOfPoint> contours) {
    double maxArea = 0;
    int maxHandContourAreaIdx = 0;
    double area;
    for (int i = 0; i < contours.size(); i++) {
        area = Math.abs(Imgproc.contourArea(contours.get(i)));
        if (area > maxArea) {
            maxArea = area;
            maxHandContourAreaIdx = i;
        }
    }
    return maxHandContourAreaIdx;
}