【Emgu.CV教程】2.13、基本方法之MinMaxLoc()最大值最小值查找

        我们可以简单的把图像看成是一个矩阵,图像算法就转换成对这个矩阵的各种操作,比如加减乘除、矩阵转置、归一化等等,这样对以后的函数理解会更直观。

        在图像分割、颜色处理过程中,经常需要统计出图像内的最大值、最小值,以及他们所在的位置,有没有简单办法呢?一种是自己写算法,用for语句遍及图像,对每个像素点进行判断,实现起来非常简单,但是效率不高。

        效率高,又简单的办法,是用MinMaxLoc()这个函数。它可以在一副图像中找到最大值、最小值,以及他们所在位置的坐标。函数是这样定义的:

public static void MinMaxLoc(
    IInputArray arr, // 输入图像
    ref double minVal, // 返回最小值的指针。
    ref double maxVal, // 返回最大值的指针。
    ref Point minLoc, // 返回最小值位置的指针 。
    ref Point maxLoc, // 返回最小值位置的指针。
    IInputArray mask = null // 掩码图,和arr尺寸相同,非零的元素才统计
)

       有三点需要注意:

  1. 这个函数的输入图像,必须是单通道的。更直接一点的说法就是,可以输入灰度图,或者彩色空间的指定通道。
  2. 可以使用掩码,黑底白色前景,这样就会只统计 arr 图中与掩码mask对应的白色的部分。
  3. 如果有多个相同的最值,那么返回的坐标是按照从上到下,从左到右的顺序排列的第一个位置。

       这个函数包教包会,我们刚好在第十四篇讲了通道分离,那就尝试一下在一副图片中分别找到蓝色通道、绿色通道、红色通道的极值点及坐标。原始图像是一个500 *500 大小,从上到下分别被纯蓝色、纯绿色、纯红色填充的图片,请诸君看以下代码:

Mat tempMat = srcMat.Clone();
double minValueBlue = 0;
double maxValueBlue = 0;
System.Drawing.Point minLocationBlue = new System.Drawing.Point();
System.Drawing.Point maxLocationBlue = new System.Drawing.Point();
double minValueGreen = 0;
double maxValueGreen = 0;
System.Drawing.Point minLocationGreen = new System.Drawing.Point();
System.Drawing.Point maxLocationGreen = new System.Drawing.Point();
double minValueRed = 0;
double maxValueRed = 0;
System.Drawing.Point minLocationRed = new System.Drawing.Point();
System.Drawing.Point maxLocationRed = new System.Drawing.Point();
Mat[] channels = new Mat[3];
channels = tempMat.Split();
CvInvoke.MinMaxLoc(channels[0], ref minValueBlue, ref maxValueBlue, ref minLocationBlue, ref maxLocationBlue);
CvInvoke.MinMaxLoc(channels[1], ref minValueGreen, ref maxValueGreen, ref minLocationGreen, ref maxLocationGreen);
CvInvoke.MinMaxLoc(channels[2], ref minValueRed, ref maxValueRed, ref minLocationRed, ref maxLocationRed);
MessageBox.Show("蓝色通道最小值为:" + minValueBlue + ",其坐标是:" + minLocationBlue + ",最大值为:" + maxValueBlue + ",其坐标是:" + maxLocationBlue + "\r\n绿色通道最小值为:" + minValueGreen + ",其坐标是:" + minLocationGreen + ",最大值为:" + maxValueGreen + ",其坐标是:" + maxLocationGreen + "\r\n红色通道最小值为:" + minValueRed + ",其坐标是:" + minLocationRed + ",最大值为:" + maxValueRed + ",其坐标是:" + maxLocationRed);

       结果就是下图左边的对话框, 我用线条将数值和原始图像做了对应,是我的原创啊,网上其他作者都没仔细讲解过:

  1. 左上角第一个点坐标是P(0,0),它是蓝色极大值255的返回点,同时也是绿色和红色极小值0的返回点。
  2. 最左边第0列,第171行的绿色点,就是绿色极大值255的返回点,也是蓝色极小值0的返回点。
  3. 最左边第0列,第346行的红色点,就是红色极大值255的返回点。

         MinMaxLoc()是一个很有用的函数,读者们可以根据以上代码,多照几张图片试试。

原创不易,请勿抄袭。共同进步,相互学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/301110.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详解Java中@Accessors注解(全)

目录 前言1. 概念2. 属性2.1 fluent属性2.2 chain属性2.3 prefix属性 前言 关于该注解的学习,主要来源项目中涉及,对此进行查漏补缺 Accessors 注解通常用于简化实体类的代码,使其更加简洁和易读。 1. 概念 Accessors 是 Lombok&#xff…

快手面经总结(2024最新)

快手 面经1-一面 开始先是手撕算法两道 自我介绍两道手撕 将字符串转化为整数 (这里当时出现溢出值问题,进行了思考解决,写了两种方式)synchronize , 可以使用的几种形式,代码写出 操作系统 和 数据结构 hash解决冲突 &#xff…

【认知计算】《智能追踪》

故事背景科技相关: 认知计算 意在使计算机系统能够像人的大脑一样学习、思考,并做出正确的决策。 模仿大脑从经验中学习,发现不同事物之间的联系,进而实现逻辑推理和记忆等功能。 认知计算是一种类脑计算模式,源自模…

我的创作纪念日——redis的历史纪录

机缘 最开始只想存留点Redis的操作信息,后来写着写着也就写多了,虽然后面很长时间由于忙就没继续写,但是还是偶尔登录看一下,有好几篇文章的浏览量还是很多的呢。 收获 收获不多,粉丝也才三十多个,浏览量感…

html 原生网页使用ElementPlus 日期控件el-date-picker换成中文

项目: 原生的html,加jQuery使用不习惯,新html页面导入vue3,element plus做界面,现在需要把日历上英文切成中文。 最终效果: 导入能让element plus日历变成中文脚本: elementplus, vue3对应的js都可以通过创建一个vu…

修改 docker /dev/shm 的大小

修改 docker /dev/shm 的大小 1,获取完整id: docker inspect 245| grep Id rootlynxi:~# docker inspect 245| grep Id"Id": "245ab167ed9a79873b31b3a38df2053870fe72f267c3c1a660df25c63e37e88b",2,修改 ShmSize&…

vueRouter 配合 keep-alive 不生效的问题

文章目录 问题说明案例复现demo 结构问题复现和解决 其实这个不生效的问题根本也不算一个问题,犯的错和写错单词差不多,但是也是一时上头没发现,所以记录一下,如果遇到同样的问题,也希望可以帮助你早点看到这个哭笑不得…

网络技术基础入门全套实验-厦门微思网络CCNA实验手册

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 微思简介(https://www.xmws.cn) 微思成立于2002年,是一个诚信敬业、积极向上、充满活力、专注技术服务的企业。 微思获得了八…

【SpringBoot+dubbo+zk】实现服务之间rpc通信

0)前置准备&#xff0c;我们使用zk作为注册中心&#xff0c;先启动zk&#xff0c;也就是2181端口。 1)父工程pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http…

[SpringBoot]自定义注解@AutoFill,实现公共字段自动填充(避免重复对时间属性初始化

对于时间属性&#xff0c;如createTime、updateTime在进行插入、修改操作时都要一个个初始化处理&#xff0c;过于麻烦。 可以自定义注解AutoFill作用于INSERT&#xff0c;UPDATE操作方法上&#xff0c;再自定义切面类&#xff0c;统一拦截加入了AutoFill注解的方法&#xff0c…

PAT 乙级 1076 Wifi密码

解题思路&#xff1a;首先这题看着复杂实际很简单&#xff0c;每题就一个正确的我们把他找出来就可以&#xff0c;之后利用和’A’ 相减加一 求出数值&#xff0c;输出即可。python代码更容易 c语言: #include<stdio.h> int main() {int n,i,j,count0;scanf("%d&q…

[ffmpeg系列 03] 文件、流地址(视频)解码为YUV

一 代码 ffmpeg版本5.1.2&#xff0c;dll是&#xff1a;ffmpeg-5.1.2-full_build-shared。x64的。 文件、流地址对使用者来说是一样。 流地址(RTMP、HTTP-FLV、RTSP等)&#xff1a;信令完成后&#xff0c;才进行音视频传输。信令包括音视频格式、参数等协商。 接流的在实际…

【Spring实战】25 Spring Boot Admin 应用

文章目录 1. 查看健康信息2. 使用 Micrometer 和 "/metrics"3. 管理包和类的日志级别4. 其他功能总结 Spring Boot Admin 是一个功能强大的工具&#xff0c;用于监控和管理多个 Spring Boot 应用程序。通过上一篇文章 【Spring实战】24 使用 Spring Boot Admin 管理…

vue-springboot 音乐推荐系统 带歌词的音乐播放器系统设计与实现 7902c

少数民族音乐网站在流畅性&#xff0c;续航能力&#xff0c;等方方面面都有着很大的优势。这就意味着少数民族音乐网站的设计可以比其他系统更为出色的能力&#xff0c;可以更高效的完成最新的音乐信息、音乐资讯、在线交流等功能。 此系统设计主要采用的是JAVA语言来进行开发&…

240107-RHEL8+RHEL9配置安装:NVIDIA驱动(15步)+CUDA(4步)+CUDNN(5步)+GPU压力测试

Section 0: 基础知识 CUDA、cuDNN 和 PyTorch 版本的选择与搭配指南 安装优先级: 显卡驱动 → CUDA → CUDA Toolkit → cuDNN → Pytorch 即显卡驱动决定了CUDA版本&#xff0c;CUDA版本决定了CUDA Toolkit、cuDNN、Pytorch各自的版本提前下载 &#xff5c; CUDA提前下载 &am…

分布式系统架构设计之分布式消息队列基础知识

随着微服务、大数据和云计算的普及&#xff0c;分布式系统已经成为现代软件架构的核心。在分布式系统中&#xff0c;各个组件间的通信和数据交换尤其重要&#xff0c;而消息队列正是实现这一目标的关键技术之一。 在分布式架构设计过程中&#xff0c;架构师们需要对消息队列有…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于两阶段随机优化的电能量与深度调峰融合市场出清模型及定价方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主的专栏栏目《论文与完整程序》 这个标题涉及到一个电力市场的建模和定价方法&#xff0c;采用了两阶段随机优化的策略&#xff0c;目标是实现电能量与深度调峰的融合。下面是对标题中各个…

逆向一个Go程序

前奏 事先声明&#xff0c;自导自演&#xff0c;纯属为了演示基本的逆向思维 用Go写一段模拟登录的代码&#xff1a; package mainimport ("fmt" )func main() {pass : ""fmt.Print("input password:")fmt.Scan(&pass)if pass "hel…

DTD(文档类型定义)

一、简介 为什么使用DTD 通过 DTD&#xff0c;您的每一个 XML 文件均可携带一个有关其自身格式的描述。 通过 DTD&#xff0c;独立的团体可一致地使用某个标准的 DTD 来交换数据。 而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。 您还可以使用 DTD 来验…

【架构专题】不会业务稳定性建设架构师直接开除!!!

为什么要做业务稳定性建设&#xff1f; 首先&#xff0c;什么是业务稳定性建设&#xff1f;顾名思义&#xff0c;就是保证系统的稳定运行&#xff0c;让用户不受任何影响地使用产品。对于一个企业来说&#xff0c;这非常重要&#xff0c;因为如果产品出现问题&#xff0c;那么…