报错:FindContours support only 8uC1 and 32sC1 images | Unsupported data type (=4) | opencv java开发

news/2024/7/21 3:53:09 标签: opencv, java, 图像处理

关于findcontours函数的具体参数介绍参见博客:
中文版:Opencv 轮廓检测相关api文档
英文版:官方文档

调用findcontours()方法时,所需的参数在python环境和java环境都是差不多的。
如果出现这个报错,就可以锁定为是输入参数的格式不是所需要的8uC1 或 32sC1。(可以看出这个方法只支持单通道图像)

先来看看这个函数需要的参数:

c++:
void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point())

这些参数具体的含义,以及可以选择的值,在上面博客(中文版)中写得非常详细了,建议对照查看~

下面贴上我的代码:
(需要的准备工作:先把文件读入为Mat对象,命名为image)

java">java:
//1.首先要读取原图像为Mat格式,命名为image。这一步我自己写函数实现的,不好贴上来。你们调opencv的方法也可以。

//——————下面这些可以copy去用——————

//2.从二值图像提取轮廓
//创建contours对象,用于存储提取出来的轮廓
List<MatOfPoint> contours = new ArrayList<>();
//创建hierarchy
Mat hierarchy = new Mat();
//调用方法
Imgproc.findContours(image, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_NONE);
//以上,就把提取出的轮廓存入contours了

//3.绘制轮廓
//利用contours绘制轮廓,输出为文件
//设置背景色为黑色
Mat background = new Mat(image.size(), CvType.CV_8UC1, new Scalar(0));
//调用方法,设置轮廓线为[添加链接描述](https://www.cnblogs.com/long5683/p/10492180.html)白色(contourIdx=-1为绘制所有轮廓,thickness=4是线宽)
Imgproc.drawContours(background, contours, -1, new Scalar(255), 4);
Highgui.imwrite("C:\\data\\background.tif", background);

记录踩过的坑:
1.报错:FindContours support only 8uC1 and 32sC1 images。
我输入的图像格式是8UC1的,即无符号整型八位单通道格式,所以调用方法时,mode必须指定为RETR_EXTERNAL!!!(就是这个问题!我找了好久)
如果mode指定为CV_RETR_CCOMP 或者 CV_RETR_FLOODFILL,输入图像则需要是32位的整型图像,即CV_32SC1格式。

2.Unsupported data type (=4) .
这个意思是:你输入的数据类型(= 4)为CV_32SC1,该方法不支持,你需要将数据转换CV_8UC1后再使用。
参考回答:OpenCV Python error: Unsupported data type (=4) in function ‘cv::opt_AVX2::getMorphologyRowFilter’

3.绘制轮廓时也要注意前两个参数格式一致。
关于drawContours方法的参数介绍:OpenCV——轮廓填充drawContours函数解析

END


http://www.niftyadmin.cn/n/1223630.html

相关文章

RH033(Red Hat Linux)基础课程介绍

RH033(Red Hat Linux)基础课程介绍 课程名称:RH033基础课程    课程英文名称: Red Hat Linux    所属厂商:RedHat    所属认证:RHCE    考试号:RH302 课程介绍:    适用于Linux的新使用者&#xff0c;他们希望了解并掌握基本知识&#xff0c;以顺利使用他们自己的Re…

ZZULIOJ 1105:判断友好数对(函数专题)

1105: 判断友好数对&#xff08;函数专题&#xff09; 题目描述 输入两个正整数m和n&#xff0c;顺序输出m到n之间的所有友好数对。 如果两个整数的所有正因子之和&#xff08;包括1&#xff0c;不包括自身&#xff09;等于对方&#xff0c;就称这对数是友好的。例如&#xff…

arcmap10.7打开tif文件一片空白 | 解决方法

0.首先查看tif文件的大小&#xff0c;确保其中有内容。 1.如果是在同一个窗口中打开两种格式的图像&#xff0c;可能会让第二张图像无法显示。 解决方法&#xff1a;关闭窗口&#xff0c;在新窗口中打开第二张图像。 示例&#xff1a;在arcmap中选中文件&#xff0c;右键查看两…

DataRabbit 轻量的数据访问框架(14)-- DataRabbit 3.0 与 Linq to sql 性能比较

今天装好了VS2008 Beta2&#xff0c;就迫不及待地试用一下Linq中的ORM功能&#xff0c;在初步尝试后&#xff0c;发现Linq中的ORM还是非常不错的&#xff0c;通过反射查看System.Data.Linq.dll发现&#xff0c;Linq中的ORM是使用反射完成了OR的映射工作&#xff0c;基于此&…

ZZULIOJ 1106: 回文数(函数专题)

1106: 回文数&#xff08;函数专题&#xff09; 题目描述 一个正整数&#xff0c;如果从左向 右读&#xff08;称之为正序数&#xff09;和从右向左读&#xff08;称之为倒序数&#xff09;是一样的&#xff0c;这样的数就叫回文数。输入两个整数m和n&#xff08;m<n)&…

java.lang.UnsatisfiedLinkError: org.gdal.gdal.gdalJNI.AllRegister()V | java调用gdal报错 | windows

项目需要&#xff0c;在springboot项目中使用了gdal.jar包的方法。 启动项目时报错&#xff1a; java.lang.UnsatisfiedLinkError: org.gdal.gdal.gdalJNI.AllRegister()V &#xff08;我还用到了opencv-2413.jar&#xff0c;同样启动报错&#xff1a; &#xff08;java.lang.U…

显示日程的自定日历

效果图如下: 示例代码如下:--------------HTML部分 <% Page Language"C#" AutoEventWireup"true" CodeFile"Default.aspx.cs" Inherits"PrivateWork_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti…

ZZULIOJ 1109: 数根(函数专题)

1109: 数根&#xff08;函数专题&#xff09; 题目描述 输入一个正整数&#xff0c;输出该数的数根。数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数&#xff0c;那么这个数就是数根。如果结果是两位数或者包括更多位的数字&#xff0c;那么再把这些数…