java contour,Java中的OpenCV drawContours

在尝试使用OpenCV的findContours和drawContours函数在图像中绘制对象轮廓时,遇到了格式不支持的错误。问题在于findContours只支持特定类型的图像格式。解决方案是将图像转换为正确的类型,即CV_32SC1。通过将原始图像转换并使用findContours找到轮廓,然后在新的Mat对象上绘制所有轮廓,最终成功保存了带有轮廓的图像。
摘要由CSDN通过智能技术生成

I'm trying to draw contours around object in image but i get error

OpenCV Error: Unsupported format or combination of formats ([Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only) in cvStartFindContours, file C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\imgproc\src\contours.cpp, line 198

I tried to convert image but error is still there how to use DrawContour?

Mat imageInMat = Imgcodecs.imread("C:/Users/ja/workspace/imgtomath/bin/imgtomath/lena.png");

if(imageInMat.empty()== true)

{System.out.println("Error no image found!!");}

imageInMat.convertTo(imageInMat, CvType.CV_32SC1);

List contours = new ArrayList();

Mat hierarchy = new Mat();

Imgproc.findContours(imageInMat, contours, hierarchy, Imgproc.RETR_FLOODFILL, Imgproc.CHAIN_APPROX_SIMPLE);

Imgproc.drawContours(imageInMat, contours, -1, new Scalar(255,0,0));

解决方案

It should work properly:

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 contours = new ArrayList();

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值