OpenCV 在图像上运行 kmeans 算法

2024-01-25

我试图在 3 通道彩色图像上运行 kmeans,但每次我尝试运行该函数时,它似乎都会崩溃并出现以下错误:

OpenCV Error: Assertion failed (data.dims <= 2 && type == CV_32F && K > 0) in unknown function, file ..\..\..\OpenCV-2.3.0\modules\core\src\matrix.cpp, line 2271

我在下面的代码中添加了一些注释,以帮助指定传入的内容。非常感谢任何帮助。

// Load in an image
// Depth: 8, Channels: 3
IplImage* iplImage = cvLoadImage("C:/TestImages/rainbox_box.jpg");

// Create a matrix to the image
cv::Mat mImage = cv::Mat(iplImage);

// Create a single channel image to create our labels needed
IplImage* iplLabels = cvCreateImage(cvGetSize(iplImage), iplImage->depth, 1);

// Convert the image to grayscale
cvCvtColor(iplImage, iplLabels, CV_RGB2GRAY);

// Create the matrix for the labels
cv::Mat mLabels = cv::Mat(iplLabels);

// Create the labels
int rows = mLabels.total();
int cols = 1;
cv::Mat list(rows, cols, mLabels .type());
uchar* src;
uchar* dest = list.ptr(0);
for(int i=0; i<mLabels.size().height; i++) 
{
    src = mLabels.ptr(i);
    memcpy(dest, src, mLabels.step);
    dest += mLabels.step;
}
list.convertTo(list, CV_32F);

// Run the algorithm
cv::Mat labellist(list.size(), CV_8UC1);
cv::Mat centers(6, 1, mImage.type());
cv::TermCriteria termcrit(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0);
kmeans(mImage, 6, labellist, termcrit, 3, cv::KMEANS_PP_CENTERS, centers);

错误说明了一切: Assertion failed (data.dims <= 2 && type == CV_32F && K > 0)

这些规则非常容易理解,该函数仅在以下情况下才起作用:

  • mImage.depth() is CV_32F

  • if mImage.dims is <= 2

  • and if K > 0。在这种情况下,您定义K as 6.

从你对问题的表述来看,似乎是:

IplImage* iplImage = cvLoadImage("C:/TestImages/rainbox_box.jpg");` 

正在将图像加载为IPL_DEPTH_8U默认情况下,而不是IPL_DEPTH_32F。这意味着mImage也是IPL_DEPTH_8U,这就是您的代码不起作用的原因。

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

OpenCV 在图像上运行 kmeans 算法 的相关文章

随机推荐

  • 在字符串末尾增加整数

    我有一个很强的 芝加哥 伊利诺伊州 我想在它的末尾添加一个 所以它将是 芝加哥 伊利诺伊州 注意 它也可能是芝加哥 伊利诺伊州 10 我希望它去芝加哥 伊利诺伊州 11 所以我不能做 substr 有什么建议的解决方案吗 一个非常简单的问题
  • Python:pyswip 输出返回 Atom 和 Functor

    基于一些较旧的post https stackoverflow com questions 63890053 prolog define logical operator in prolog as placeholder for other
  • RabbitMQ Consumer总是直接关闭(C#)

    目前我正在学习如何使用 RabbitMQ 发送作品 但接收不起作用 这是我的代码 var factory new ConnectionFactory HostName hostName using var connection factor
  • 带有接口的instanceof [重复]

    这个问题在这里已经有答案了 如果我尝试将instanceof运算符与错误的类一起使用 我会收到编译错误 动物无法转换为字符串 但使用接口时我不会收到编译时错误 例如 在第 10 行中 我收到编译错误 因为 Animal 不是 String
  • React Native父子通信并返回值

    我是反应本机环境的初学者 我想了解本机反应中的亲子沟通 家长将一个数字传递给孩子 例如 家长将 2 传递给孩子 子级将有一个处理函数 将相同的数字乘以 2 次并将结果返回给父级 作为示例 2 2 并返回 父级将调用子函数并查看输出是否正确并
  • 如何修复我的生成器角度项目以便 grunt 测试有效?

    我正在学习本教程 http www sitepoint com kickstart your angularjs development with yeoman grunt and bower http www sitepoint com
  • Python 和 Pylance VS Code 扩展之间有什么区别?

    我刚刚从老朋友 Sublime 转向 VSCode 我真的很喜欢它的工作方式和它所具有的功能 我是一名 Python 开发新手 我发现了 VSCode 的两个流行的 python 扩展 Python 和 PyLance 我的问题是 Pyth
  • FileSystemWatcher OnChanged 事件需要重新加入 UI 线程

    如何在 FileSystemWatcher 中获取 OnChanged 事件 以便在 OnChanged 事件完成后调用 UI 线程上的方法 或者 只是为了了解知识 如何让 OnChanged 事件完全在 UI 线程上运行 如果你想File
  • Java HttpSession

    java servlet中的HttpSession是在之后才创建的吗 HttpSession s request getSession 在我的代码中我没有这样写 但是当我使用时if request getSession false null
  • Ufw 防火墙阻止 kubernetes(使用 calico)

    我正在尝试在我的服务器 Debian 10 上安装 kubernetes 集群 在我的服务器上 我使用 ufw 作为防火墙 在创建集群之前 我在 ufw 上允许了这些端口 179 tcp 4789 udp 5473 tcp 443 tcp
  • Apache的Mesos和Google的Kubernetes有什么区别

    Apache的Mesos和Google的Kubernetes到底有什么区别 据我了解 两者都是服务器集群管理软件 任何人都可以详细说明主要区别在哪里 什么时候会首选哪个框架 你为什么要使用Kubernetes 位于 Mesosphere 之
  • 设置已发布的 npm 项目的“根”

    我正在发布一个名为的 npm 包foo到 npm 注册表 我使用compile to js 语言编写了该包 为了理智起见 我将编译的输出放入dist 项目目录的文件夹 我的package json将入口点列出为dist entry js n
  • Azure Web Apps 是否在多个实例之间共享磁盘?

    根据大卫 埃博 David Ebbo 在Azure 运行时环境 https github com projectkudu kudu wiki Azure runtime environment file system本文中 当您启动 2 个
  • 为什么“du”的输出通常与“du -b”如此不同

    为什么输出是du通常与du b b是简写 apparent size block size 1 仅使用 apparent size大多数时候给我相同的结果 但是 block size 1似乎可以解决问题 我想知道输出是否正确 哪些数字是我想
  • docker compose 会自动创建端口映射吗?

    我在 Visual Studio 2019 中创建了一个简单的 asp net core 应用程序并添加了 docker 支持 Dockerfile dockerignore 和 docker compose 文件均已创建 在命令提示符中
  • 数据库设计:跟踪每个用户的大量属性。如此之多,我可能会用完列(行存储空间)

    对于我所关心的问题 我希望得到一些意见 我的数据库中有一个 User 表 其中包含您期望的基本内容 例如用户名 密码等 该应用程序要求我跟踪每个用户的大量属性 如此之多 我可能会用完列 行存储空间 我很想添加一个包含 UserID Prop
  • 无需显式定义要抓取的每个字段即可抓取数据

    我想抓取一页数据 使用 Python Scrapy 库 而不必定义页面上的每个单独字段 相反 我想使用动态生成字段id元素的名称作为字段名称 起初我认为最好的方法是建立一个收集所有数据的管道 并在收集完所有数据后将其输出 然后我意识到我需要
  • Erlang:使用 gen_tcp:controlling_process 避免竞争条件

    我正在按照以下顺序实现简单的 tcp 服务器 ok LS gen tcp listen Port active true reuseaddr true mode list ok Socket gen tcp accept LS Pid sp
  • 当区域性可变时,格式化不带年份的本地化日期

    我需要根据当前设置的区域性将日期显示在 M dd 或 dd M 中 在我们的应用程序中 我们明确设置基于配置的区域性 目前 我们使用以下方法格式化日期 string dateStringFormat Thread CurrentThread
  • OpenCV 在图像上运行 kmeans 算法

    我试图在 3 通道彩色图像上运行 kmeans 但每次我尝试运行该函数时 它似乎都会崩溃并出现以下错误 OpenCV Error Assertion failed data dims lt 2 type CV 32F K gt 0 in u