我正在尝试创建一个方法来实现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操作。