OpenCV:findContours 函数错误

2023-11-29

我正在使用 2.4.3 版本的 opencv,并尝试在精明的边缘检测后使用“findContours”函数,如下所示:

struct Component
{
    cv::Rect boundingBox;
    double area;
    double circularity;
}

cv::vector < Component > components;
cv::vector < cv::Vec4i > hierarchy;
cv::findContours ( cannyEdges, components, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);

然后它会抛出“cv::findContours”行错误,如下所示:

OpenCV Error: Assertion failed (mtype == type0 || ( CV_MAT_CN(mtype) == CV_MAT_CN(type0) && ((1((type0) & fixedDepthMask) != 0 )) in unknown function, file ...\opencv\modeuls\core\src\matrix.cpp, line 1421

我该如何解决这个问题?


cv::findcontours 将每个轮廓返回为点向量(请参见http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#findcontours).

您必须自己将这些向量转换为您的数据结构(组件),就像我创建的这个最小示例一样:

#include <opencv2/opencv.hpp>
#include <iostream>
struct Component
{
    cv::Rect boundingBox;
    double area;
    double circularity;
};
int main()
{
    // Create a small image with a circle in it.
    cv::Mat image(256, 256, CV_8UC3, cv::Scalar(0, 0, 0));
    cv::circle(image, cv::Point(80, 110), 42, cv::Scalar(255,127, 63), -1);

    // Find canny edges.
    cv::Mat cannyEdges;
    cv::Canny(image, cannyEdges, 80, 60);

    // Show the images.
    cv::imshow("img", image);
    cv::imshow("cannyEdges", cannyEdges);

    // Find the contours in the canny image.
    cv::vector<cv::Vec4i> hierarchy;

    // "Each contour is stored as a vector of points."
    // http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#findcontours
    typedef cv::vector<cv::vector<cv::Point> > TContours;
    TContours contours;
    cv::findContours(cannyEdges, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);
    // cannyEdges is destroyed after calling cv::findContours

    // Print number of found contours.
    std::cout << "Found " << contours.size() << " contours." << std::endl;

    // Convert contours to Components.
    typedef cv::vector<Component> TComponents;
    TComponents components;
    for (TContours::const_iterator it( contours.begin() ); it != contours.end(); ++it)
    {
        Component c;
        c.area = cv::contourArea(*it);
        c.boundingBox = cv::boundingRect(*it);
        c.circularity = 0.0; // Insert whatever you mean by circularity;
        components.push_back(c);
    }

    for (TComponents::const_iterator it( components.begin() ); it != components.end(); ++it)
        std::cout << it->area << std::endl; // and whatever you want.

    // Wait for user input.
    cv::waitKey();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV:findContours 函数错误 的相关文章

随机推荐

  • F# 中“>>”运算符的语义

    在微软的F 样本 他们使用 gt gt 运算符 如下所示 test gt Seq iter any to string gt gt printfn line s gt gt 运算符在这种情况下做什么 序列中的每个项目 在本例中为数组 是否被
  • .NET 异步流读/写

    我一直在尝试解决这个 并发编程 考试练习 C 知道Stream类包含int Read byte buffer int offset int size and void Write byte buffer int offset int siz
  • Html / Php 表单未添加到 SQL 数据库

    我已经为此工作了几个小时 包括重建我的整个代码 我无法弄清楚出了什么问题 HTML 表单应该填充患者 SQL 数据库 但它不起作用 我在网站的另一部分使用了一个类似的表格 该表格可以完美地工作 但这个表格似乎不起作用 并且无法弄清楚为什么
  • MySQL REPEATABLE-READ Workbench 事务级别未设置

    我们在 my ini 文件中设置了以下内容 mysql 事务隔离 已提交读 我们假设此设置将是所有用户会话的默认设置 使用 PHPMyAdmin 登录时 tx isolation 设置正确并且按预期工作 然而 当使用 MySQL Workb
  • 拖放在 C# 中不起作用

    我在 C 中创建了一个拖放控件 以允许人们将文件拖放到我的表单上 这是我遇到的问题 调试时工作正常 但是 当以管理员模式运行我的程序时 它不起作用 这有什么原因吗 这是我的代码 private void panel1 DragEnter o
  • .NET 24 小时格式时间的正则表达式

    我可以在 NET 中有一个正则表达式吗 它只允许文本框中使用 24 小时时间格式 Thanks 此致 多发性硬化症 正则表达式 时间 hh mm 验证 24 小时格式 0 1 d 2 0 3 0 5 d 如果你也需要几秒钟 0 1 d 2
  • 使用 HTML 的 PHP 表格

    我的目标是使用一个 txt 文件 其中包含填写表单的特定响应所需的数据 该表格应该有用户名和密码 此外 还可以在表单上设置价格范围参数 用户名可以任意大小写 但密码区分大小写 我已经创建了我将使用的 html 表单 txt 文件中的数据包含
  • 使用函数参数进行回文条件检查[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 这是使用函数参数来检查字符串是否回文的 php 代码
  • Java 日期之间的天数(作业)

    当我运行该程序时 这是几天的休息时间 对我做错了什么有什么建议吗 我知道有一种更简单的方法可以做到这一点 但为此我试图展示查找之间的天数的所有实际步骤 家庭作业 因此不能使用日期时间库 public class DaysBetween pu
  • Spring REST 模拟上下文路径

    我尝试使用以下代码片段设置 Spring Rest 模拟的上下文路径 private MockMvc mockMvc Before public void setUp this mockMvc MockMvcBuilders webAppC
  • 重复条目并重命名 pandas 数据透视表中的列行而不进行聚合

    我正在尝试将这个示例数据帧从长格式重塑为宽格式 而不聚合任何数据 import numpy as np import pandas as pd df pd DataFrame SubjectID A A A B B C A Date 201
  • ssh远程主机标识已更改[关闭]

    Closed 这个问题是与编程或软件开发无关 目前不接受答案 我已经重新安装了服务器 并且收到以下消息 user hostname ssh root pong WARNING REMOTE HOST IDENTIFICATION HAS C
  • Libsodium“调用未定义的函数sodium_randombytes_buf”[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 尝试遵循示例here 但它给了我 Fatal error Uncaught Error Call to undefined function sodium randombytes buf
  • 如何更改 adobe reader 缩放级别?

    我有一个 Jasper Report 它在 Java Spring 中创建 PDF 我已经尝试改变缩放级别几个小时但没有成功 每当我使用 Adob e reader 打开 pdf 时 其分辨率为 149 同事甚至更糟 曾经有一个类似的que
  • 为什么可以将匿名类的实例分配给接口变量?

    我是 Java 新手 我无法理解之间的关系anonymous class instance and interface 请参阅中的示例这个网站 anonymous instance as a variable Runnable r new
  • 读取和写入文件的最简单方法

    有很多不同的方式来读取和写入文件 文本文件 不是二进制 在 C 中 我只需要简单且使用最少代码的东西 因为我将在项目中大量使用文件 我只需要一些东西string因为我需要的只是阅读和写作strings Use 文件 ReadAllText
  • 我是否需要在
    标记等末尾添加“/”? [复制]

    这个问题在这里已经有答案了 你需要有一个 在一个结束时img标签 我看见一个例子在 W3schools com 上没有 img src smiley gif alt Smiley face height 42 width 42 我知道没有必
  • 提取方法中的空验证

    我使用 c 8 和可空分析器 csproj
  • Shiny flexdashboard 中的facet_grid 给出错误“分面变量必须至少有一个值”

    我在获取 ggplot2 时遇到一些问题facet grid评估系统的绘图 该图渲染良好 但我在浏览器和控制台中收到以下错误 错误 分面变量必须至少有一个值 每次我根据输入切换品牌条目时都会发生这种情况input brand 应用程序不会崩
  • OpenCV:findContours 函数错误

    我正在使用 2 4 3 版本的 opencv 并尝试在精明的边缘检测后使用 findContours 函数 如下所示 struct Component cv Rect boundingBox double area double circu