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
适用于厚度?当厚度为负值时,这意味着什么?