opencv轮廓错误与图像格式

时间:2018-03-18 22:39:35

标签: java opencv

我正在尝试创建一个方法来实现OpenCV库中的轮廓方法但是收到错误。我已经搜索了几个小时的错误,但仍无法使代码生效。这是代码:

import java.util.ArrayList;
import java.util.List;



import org.opencv.core.MatOfPoint;
import org.opencv.core.MatOfPoint2f;
import org.opencv.highgui.Highgui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Rect;
import org.opencv.core.Mat;
import org.opencv.core.MatOfInt;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.core.Size;

import java.awt.Rectangle;


    public class Contour {
        private static ArrayList<Rect> getContourArea() {
            System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
            Mat color = Imgcodecs.imread("C:\\Users\\bheda\\Desktop\\Cat03.jpg", CvType.CV_8UC3);
            Mat gray = new Mat();
            Imgproc.cvtColor(color, gray, Imgproc.COLOR_BGR2GRAY);
            Mat binarized = new Mat();
            Imgproc.threshold(gray, binarized, 100, 255, Imgproc.THRESH_BINARY);
            Mat hierarchy = new Mat();
            List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
            Imgproc.findContours(binarized, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
            Rect rect = null;
            double maxArea = 300;
            ArrayList<Rect> arr = new ArrayList<Rect>();
            for (int i = 0; i < contours.size(); i++) {
                Mat contour = contours.get(i);
                double contourArea = Imgproc.contourArea(contour);
                if (contourArea > maxArea) {
                    rect = Imgproc.boundingRect(contours.get(i));
                    arr.add(rect);
                }
            }
            return arr;
        }
        public static void main(String args[]){
            // Load the library

            getContourArea();
        }    
    }

当我尝试运行此代码时,出现以下错误:

        OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor, file C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\imgproc\src\color.cpp, line 11111
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\imgproc\src\color.cpp:11111: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor
]
    at org.opencv.imgproc.Imgproc.cvtColor_1(Native Method)
    at org.opencv.imgproc.Imgproc.cvtColor(Imgproc.java:1858)
    at test.Contour.getContourArea(Contour.java:30)
    at test.Contour.main(Contour.java:52)

我试图将图像转换为二进制,但它仍然不起作用。我不确定代码的哪一部分是错的,但我按照OpenCv网站上的说明进行操作。这个想法是在预定义的图像上实现countour操作。

0 个答案:

没有答案