iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >OpenCV机器学习MeanShift算法笔记分享
  • 811
分享到

OpenCV机器学习MeanShift算法笔记分享

2024-04-02 19:04:59 811人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

MeanShift算法 Mean shift 是一种机器学习算法,并不仅仅局限于图像上的应用。关于 Mean shift 算法介绍的书和文章很多,这里就不多介绍了。简单的说,Mean

MeanShift算法

Mean shift 是一种机器学习算法,并不仅仅局限于图像上的应用。关于 Mean shift 算法介绍的书和文章很多,这里就不多介绍了。简单的说,Meanshift 算法是一种迭代算法,需要给一个初始的区域,然后这个算法会反复的调整这个区域,使得这个区域最吻合我们期望的特征。

OpenCV 中有两处用到了 Mean Shift 。分别是:

pyrMeanShiftFiltering

meanShift

这里只介绍第二个函数的使用方法。

我们的原始图像还是上次那个向日葵的图像,我们选中其中一朵向日葵来计算 Histogram,但是这次我们计算 Hue 通道的 Histogram:

在这里插入图片描述

之后用这个直方图数据在另外一个图像中用 Meanshift 算法去找向日葵。

下面是代码,首先加载原始图像。在原始图像中找到向日葵,计算向日葵区域的 Histogram。


    cv::Mat image = cv::imread("D:\\向日葵.jpg");
    cv::Mat imageROI = image(cv::Rect(130, 250, 75, 75));
    ColorHistogram hist;
    cv::Mat h = hist.getHueHistogram(imageROI, 65);
    cv::imshow("pic", image);
    ContentFinder finder;
    finder.setHistogram(h);
    finder.setThreshold(-1.0f);

之后加载我们要探测的图像,做 backproject,得到概率分布图。


    cv::Mat image2 = cv::imread("D:\\02.jpg");
    cv::Mat hsv;
    cv::cvtColor(image2, hsv, CV_BGR2HSV);
    int ch[1] = {0};
    cv::Mat probImage = finder.find(hsv, 0.0, 180, ch);
    cv::Mat img_color;
    cv::applyColORMap(probImage, img_color, cv::COLORMAP_JET);
    cv::imshow("backproject", img_color);

在这里插入图片描述

最后 Meanshift 就是在右图中找出概率最大的那个区域。对于这个问题来说,其实做个遍历就行。

meanshift 相比遍历效率更高。但是如果初始区域选的不好,有可能会找不到向日葵所在的区域。

所以meanshift 并不是万能的。


    cv::Rect rect(100, 100, 200, 200);
    cv::rectangle(image2, rect, cv::Scalar(255,0,0));
//    cv::TermCriteria criteria(cv::TermCriteria::MAX_ITER, 30, 1);
    cv::TermCriteria criteria(cv::TermCriteria::MAX_ITER | cv::TermCriteria::EPS,
                              10,
                              1);
    cv::meanShift(probImage, rect, criteria);
    cv::rectangle(image2, rect, cv::Scalar(0,0,255));
    cv::imshow("image2", image2);

下面是输出结果,蓝框是我们随便选的初始区域,红框是得到的结果。可以看到准确的找到了向日葵所在区域。

在这里插入图片描述

如果我们初始区域选的不太好,就会找不到向日葵。比如下面的代码。


    cv::Rect rect(0, 0, 200, 200);
    cv::rectangle(image2, rect, cv::Scalar(255,0,0));
    cv::TermCriteria criteria(cv::TermCriteria::MAX_ITER | cv::TermCriteria::EPS,
                              10,
                              1);
    cv::meanShift(probImage, rect, criteria);
    cv::rectangle(image2, rect, cv::Scalar(0,0,255));
    cv::imshow("image2", image2);

在这里插入图片描述

可以看到迭代了10次,但是区域一点没动。一般来说我们可以随机选择初始区域,如果一个区域 meanshift失败了,就再随机选另一个区域。这样试几次就能得到不错的结果。

以上就是OpenCV机器学习MeanShift算法笔记分享的详细内容,更多关于OpenCV机器学习的资料请关注编程网其它相关文章!

--结束END--

本文标题: OpenCV机器学习MeanShift算法笔记分享

本文链接: https://www.lsjlt.com/news/134269.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • OpenCV机器学习MeanShift算法笔记分享
    MeanShift算法 Mean shift 是一种机器学习算法,并不仅仅局限于图像上的应用。关于 Mean shift 算法介绍的书和文章很多,这里就不多介绍了。简单的说,Mean...
    99+
    2024-04-02
  • Go编程算法:学习笔记分享
    Go语言是一门现代化的编程语言,它的出现给开发者带来了更多的选择和机会。在Go语言中,算法是一个非常重要的部分。本篇文章将会分享一些关于Go编程算法的学习笔记,帮助读者更好地掌握这门语言。 一、排序算法 排序算法是编程中常见的算法之一,它...
    99+
    2023-06-20
    编程算法 学习笔记 自然语言处理
  • Java Unsafe学习笔记分享
    目录sun.misc.Unsafe获取Unsafe实例重点API使用场景避免初始化内存崩溃(Memory corruption)抛出异常(Throw an Exception)大数组...
    99+
    2024-04-02
  • 算法学习笔记2023.1
    为什么要学算法 因为算法无处不在 算法可以性能优化 c++ 面试问题 #includeusing namespace std;void selectSort( int arr[], int n){ for(i...
    99+
    2023-10-12
    学习 笔记
  • python入门学习笔记分享
    一、python的基础语法 1.行连接的方法是最后加上一个‘\' 2.注释:多行注释三引号,#行注释;三引号定义的字符串原样输出(保存原格式) 3.I/O语句:用逗号分隔零个或多个表...
    99+
    2024-04-02
  • ASP API教程:学习笔记分享!
    ASP API是一种常用的Web开发技术,它可以通过API(应用程序接口)来访问和操作数据,从而实现Web应用程序的开发。如果您正在学习ASP API,本文将为您提供一些有用的笔记和代码示例,帮助您更好地理解和应用这项技术。 了解ASP...
    99+
    2023-11-06
    api 教程 学习笔记
  • 学习PHP Path文件:笔记分享!
    PHP是一门流行的服务器端脚本语言,能够与HTML一起使用,可以创建动态页面和交互式网站。在PHP中,Path文件是一种重要的概念,它可以让你在PHP中访问和操作文件系统中的文件和目录。在本篇文章中,我们将深入研究PHP Path文件,分...
    99+
    2023-07-05
    path 文件 学习笔记
  • Java分布式教程:学习笔记分享!
    Java分布式是一个非常重要的知识点,它可以让我们在多台服务器上部署应用程序,从而提高应用程序的可伸缩性和可靠性。本文将分享一些Java分布式的学习笔记,包括分布式原理、分布式架构、分布式锁、分布式缓存、分布式事务等方面的内容。同时,我们...
    99+
    2023-08-31
    教程 学习笔记 分布式
  • Java中反射的学习笔记分享
    目录简介一个简单的例子设置使用反射模拟instanceof运算了解类的方法获取有关构造函数的信息查找类字段按名称调用方法创建新对象更改字段的值使用数组总结简介 反射是Java编程语言...
    99+
    2022-11-13
    Java 反射
  • Java 打包对象:学习笔记分享
    Java 是一门面向对象的编程语言,它的面向对象特性使得 Java 开发者可以轻松地组织代码和数据。但是,在编写代码的过程中,我们经常需要将一组相关的对象打包在一起进行处理。这就是 Java 打包对象的重要作用。本文将会分享 Java 打...
    99+
    2023-10-03
    打包 对象 学习笔记
  • Python 日志如何记录?学习笔记分享!
    Python是一种流行的编程语言,广泛应用于各种领域。当我们在编写Python代码时,我们需要记录应用程序中发生的事件和错误信息。这就是Python日志的作用。Python日志可以帮助我们快速定位应用程序中的问题,以便更快地解决它们。在这篇...
    99+
    2023-08-07
    关键字 日志 学习笔记
  • 打包 Java 对象:学习笔记分享
    Java 是一种常用的编程语言,开发者们常常需要将自己编写的 Java 对象打包成可执行的 JAR 文件。本文将分享一些打包 Java 对象的经验和技巧,以便于读者能够更加轻松地完成这项任务。 一、什么是 JAR 文件 JAR 文件是 J...
    99+
    2023-10-04
    打包 对象 学习笔记
  • 打包攻略:Go Path 学习笔记分享!
    Go Path 是一个非常重要的概念,它是 Go 语言中的一个环境变量,用于指定 Go 语言的工作目录。在编写 Go 程序时,我们经常需要引用其他的包,而这些包可能是我们自己写的,也可能是其他人写的。因此,我们需要将这些包放在一个统一的目...
    99+
    2023-08-24
    path 教程 打包
  • ASP 响应是什么?学习笔记分享!
    ASP响应是什么?学习笔记分享! ASP(Active Server Pages)是一种基于服务器端的Web应用程序开发技术。在ASP中,响应(Response)是指Web服务器向客户端发送数据的过程。在本文中,我们将介绍ASP响应的基本概...
    99+
    2023-10-18
    响应 学习笔记 分布式
  • 如何使用Python编程算法来处理对象?学习笔记分享!
    Python是目前应用最广泛的编程语言之一,其简单易学、功能强大、可扩展性好等特点,吸引了越来越多的程序员和开发者。在Python中,对象是一种非常重要的编程概念,能够帮助我们将真实世界中的事物转化为程序中的实体,方便进行处理和操作。本文...
    99+
    2023-07-08
    编程算法 对象 学习笔记
  • 你需要知道的Python编程算法和对象:学习笔记分享!
    Python编程是一门广泛应用于科学计算、数据分析以及人工智能领域的高级编程语言。在Python编程中,算法和对象是非常重要的概念。如果你想要成为一名优秀的Python程序员,那么你需要了解这些概念。在本文中,我们将讨论一些Python编程...
    99+
    2023-07-08
    编程算法 对象 学习笔记
  • 如何在Java中使用NumPy实现编程算法?学习笔记分享!
    在Java中,NumPy是一个非常流行的数学库,它可以让我们更加高效地处理数组和矩阵等数据结构。在这篇文章中,我们将探讨如何在Java中使用NumPy实现编程算法,并分享一些学习笔记和演示代码。 首先,我们需要安装NumPy库。可以通过以下...
    99+
    2023-09-06
    numpy 学习笔记 编程算法
  • ASP 面试如何备战?学习笔记分享!
    ASP(Active Server Pages)是一种由微软公司开发的服务器端脚本技术,它可以创建动态网页,并且可以使用多种编程语言,如VBScript、JavaScript等。ASP技术在互联网领域得到广泛应用,因此ASP开发工程师的需...
    99+
    2023-11-07
    面试 学习笔记 django
  • PHP数据类型详解:学习笔记分享!
    PHP数据类型详解:学习笔记分享! 在PHP编程语言中,数据类型是非常重要的一个概念。数据类型决定了变量可以存储哪些类型的数据,以及可以对这些数据进行哪些操作。本篇文章将对PHP中的常见数据类型进行详细的讲解,并通过演示代码的形式,帮助读者...
    99+
    2023-07-09
    数据类型 学习笔记 http
  • ASP和Spring如何结合?学习笔记分享!
    ASP和Spring是两种常见的Web开发框架,ASP是微软公司推出的一种动态Web开发框架,而Spring是Java开发中的重要框架之一。结合这两种框架可以使开发者更加高效地进行Web开发。本文将介绍ASP和Spring如何结合,同时提供...
    99+
    2023-11-14
    spring 学习笔记 http
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作