Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的OpenCV绘制轮廓_Java_Opencv_Image Processing - Fatal编程技术网

Java中的OpenCV绘制轮廓

Java中的OpenCV绘制轮廓,java,opencv,image-processing,Java,Opencv,Image Processing,我试图画出图像中物体周围的轮廓,但我得到了错误 OpenCV错误:在cvStartFindContours文件C:\builds\master\u PackSlaveAddon-win64-vc12-static\OpenCV\modules\imgproc\src\contours.cpp第198行中,不支持的格式或格式组合([Start]FindContours仅支持CV_8UC1图像!=CV_RETR\u FLOODFILL否则仅支持CV_32SC1图像) 我试图转换图像,但错误仍然存在如

我试图画出图像中物体周围的轮廓,但我得到了错误
OpenCV错误:在cvStartFindContours文件C:\builds\master\u PackSlaveAddon-win64-vc12-static\OpenCV\modules\imgproc\src\contours.cpp第198行中,不支持的格式或格式组合([Start]FindContours仅支持CV_8UC1图像!=CV_RETR\u FLOODFILL否则仅支持CV_32SC1图像)

我试图转换图像,但错误仍然存在如何使用DrawContour

Mat imaginmat=Imgcodecs.imread(“C:/Users/ja/workspace/imgtomath/bin/imgtomath/lena.png”);
if(imageInMat.empty()==true)
{System.out.println(“找不到图像错误!!”);}
imageInMat.convertTo(imageInMat,CvType.CV_32SC1);
列表等高线=新的ArrayList();
Mat层次结构=新Mat();
Imgproc.findContours(imageInMat、等高线、层次结构、Imgproc.RETR\u洪水填充、Imgproc.CHAIN\u近似简单);
Imgproc.绘制等高线(imageInMat,等高线,-1,新标量(255,0,0));

它应该能正常工作:

Mat image = Imgcodecs.imread("C:/Users/ja/workspace/imgtomath/bin/imgtomath/lena.png");
if(image.empty() == true) {
    System.out.println("Error: no image found!");
}

List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat image32S = new Mat();
image.convertTo(image32S, CvType.CV_32SC1);

Imgproc.findContours(image32S, contours, new Mat(), Imgproc.RETR_FLOODFILL, Imgproc.CHAIN_APPROX_SIMPLE);

// Draw all the contours such that they are filled in.
Mat contourImg = new Mat(image32S.size(), image32S.type());
for (int i = 0; i < contours.size(); i++) {
    Imgproc.drawContours(contourImg, contours, i, new Scalar(255, 255, 255), -1);
}

Highgui.imwrite("debug_image.jpg", contourImg); // DEBUG
Mat image=Imgcodecs.imread(“C:/Users/ja/workspace/imgtomath/bin/imgtomath/lena.png”);
if(image.empty()==true){
System.out.println(“错误:找不到图像!”);
}
列表等高线=新的ArrayList();
Mat image32S=新Mat();
image.convertTo(image32S,CvType.CV_32SC1);
Imgproc.findContours(图像32S、等高线、新垫()、Imgproc.RETR\u洪水填充、Imgproc.CHAIN\u近似值\u简单值);
//画出所有的等高线,以便填充。
Mat contourImg=新的Mat(image32S.size(),image32S.type());
对于(int i=0;i
正如错误所说,FindContentours需要8位无符号(二进制)输入图像,而不是32位有符号图像。因此,使用
imread(“blah”,0)
加载为灰度,然后使用threshold()(或Sobel,或Canny())对其进行二值化,然后重试但用于增加轮廓边界外而非轮廓边界内轮廓厚度的输入仍然相同。或者增加轮廓尺寸。为什么
-1
适用于厚度?当厚度为负值时,这意味着什么?