OpenCV中常用算子
一、图像运算
Mat src, src1, src2, dst;// 图像运算 加 减 乘 除cv::add(src1, src2, dst); // 相加:src1+src2cv::scaleAdd(src1, 1.0, src2, dst); // 相加:1.0*src1+src2cv::addWeighted(src1, 0.3, src2, 0.7, 0.0, dst); // 相加:0.3*src1+0.7*src2cv::subtract(src1, src2, dst); // 相减:src1-src2cv::subtract(cv::Scalar(255), src, dst); // 相减:255-srccv::subtract(src, cv::Scalar(128), dst); // 相减:src-128cv::multiply(src1, src2, dst, 1.0); // 相乘:src1*src2*1.0cv::mulTransposed(src, dst, true); // 相乘:true:src'*src false:src*src'cv::divide(src1, src2, dst, 1.0); // 相除:src1/src2cv::divide(255.0, src, dst); // 相除:255.0/src
二、按位运算
// 按位运算 与 或 非 异或cv::bitwise_and(src1, src2, dst); // 按位与操作 1&1=1 1&0=0 0&1=0 0&0=0cv::bitwise_or(src1, src2, dst); // 按位或操作 1|1=1 1|0=1 0|1=1 0|0=0cv::bitwise_not(src, dst); // 按位非操作 ~1=0 ~0=1cv::bitwise_xor(src1, src2, dst); // 按位异或操作 1xor1=0 1xor0=1 0xor1=1 0xor0=1cv::bitwise_and(src, cv::Scalar(255), dst);
三、函数运算
// 绝对值 开方 指数 对数 幂次方dst = cv::abs(src); // 元素绝对值cv::sqrt(src, dst); // 元素开方 x^(0.5)cv::exp(src, dst); // 元素指数 e^xcv::log(src, dst); // 元素自然对数 In(x)cv::pow(src, 5, dst); // 元素p次幂 x^5
四、像素比较
// 较大值 较小值cv::max(src1, src2, dst); // 两图像较大值cv::max(src, cv::Scalar(0), dst); // 取较大值cv::min(src1, src2, dst); // 两图像较小值cv::min(src, cv::Scalar(255), dst); // 取较小值// 像素比较,匹配标记255,否则0,输入src为单通道// CMP_EQ:= CMP_GT:> CMP_GE:>= CMP_LT:< CMP_LE:<= CMP_NE:!=cv::compare(src1, src2, dst, cv::CMP_EQ);cv::compare(src, cv::Scalar(9), dst, cv::CMP_EQ);cv::compare(cv::Scalar(9), src, dst, cv::CMP_EQ);cv::Point posOutlier; // [0.0, 256.0)bool flagRange = cv::checkRange(src, true, &posOutlier, 0.0, 256.0); // 检查值是否在范围内// 输入为单通道/多通道, 输出为单通道二值图像; 区间为闭区间Mat maskInRange;cv::inRange(gray, cv::Scalar(0), cv::Scalar(255), maskInRange); // 相当于阈值分割cv::inRange(color, cv::Scalar(0,0,0), cv::Scalar(9,9,9), maskInRange); // 多通道之间取交集
五、通道操作
// 通道合并 通道分离vector<Mat> mats;Mat grays[3] = { gray, gray, gray };cv::merge(mats, dst); // 合并cv::merge(grays, 3, dst); // 合并cv::split(dst, mats); // 分离cv::split(dst, grays); // 分离int fromTo[] = { 0, 0 };cv::mixChannels(&src, 1, &src, 1, fromTo, 1); // 通道重组
六、矩阵相关
// 矩阵相关double det = cv::determinant(src); // 行列式cv::Scalar trace = cv::trace(src); // 计算矩阵的迹double norm1 = cv::norm(src, cv::NORM_L2); // 矩阵范数double norm2 = cv::norm(src1, src2, cv::NORM_L2); // 矩阵范数int cntNonZero = cv::countNonZero(src); // 非零元素个数cv::transpose(src, dst); // 转置cv::completeSymm(src, false); // 上三角复制到下三角,使之对称cv::invert(src, dst, cv::DECOMP_LU); // 矩阵求逆或伪逆cv::normalize(src, dst, 0.0, 1.0, cv::NORM_MINMAX); // 映射到指定范围内Mat mtx = Mat::ones(100, 100, CV_8UC1);cv::setIdentity(mtx, cv::Scalar(255)); // 对角线元素设置为指定值,其他为0// 输入为浮点型对称方阵 输出特征值为向量 特征向量为矩阵Mat eigenvalues, eigenvectors;cv::eigen(src, eigenvalues, eigenvectors);// 协方差矩阵和均值Mat dstCovar, dstMean;cv::calcCovarMatrix(src, dstCovar, dstMean, 0, 6);
七、极值坐标
// 寻找图像中灰度值最大最小位置 输入为单通道double minV, maxV;int minIdx[2], maxIdx[2];cv::Point minLoc, maxLoc;cv::minMaxIdx(src, &minV, &maxV, minIdx, maxIdx); cv::minMaxLoc(src, &minV, &maxV, &minLoc, &maxLoc);
八、矩阵变换
/* 透视变换 */Mat m33 = Mat::zeros(3, 3, CV_32FC1);cv::perspectiveTransform(src, dst, m33); // 投影变换 3*3/4*4变换矩阵/* 线性变换 */Mat m22 = Mat::zeros(2, 2, CV_32FC1);cv::transform(src, dst, m22); // 任意线性变换 2*2/2*3变换矩阵/* 仿射变换 透视变换 */cv::warpAffine(src, dst, m23, src.size()); // m23 为2*3变换矩阵cv::warpPerspective(src, dst, m33, src.size()); // m33为3*3变换矩阵
perspectiveTransform / transform:变换矩阵与通道向量的乘积作为结果通道向量。
warpAffine / warpPerspective:矩阵坐标位置变换。
九、其他算子
// 矩阵求解Mat lhs, rhs, dstSolve; // n*n n*1 n*1 lhs*dstSolve=rhscv::solve(lhs, rhs, dstSolve, cv::DECOMP_LU); // 求解线性系统Mat coeffs, dstRoots; // coeffs 4*1cv::solveCubic(coeffs, dstRoots); // 三次多项式实根cv::solvePoly(coeffs, dstRoots); // 任意多项式的根cv::sort(src, dst, cv::SORT_EVERY_ROW + SORT_ASCENDING); // 分别对每行或列排序cv::sortIdx(src, dst, cv::SORT_EVERY_ROW + SORT_ASCENDING); // 排序索引cv::flip(src, dst, 0); // 绕x轴或y轴旋转 >0:y-flip 0:x-flip <0:both// 广义矩阵乘法cv::gemm(src1, src2, 1.0, src, 1.0, dst, cv::GEMM_1_T + cv::GEMM_3_T); // dst=1.0*src1'*src2+1.0*src// 幅值、角度相关Mat dstMagnitude, dstAngle;cv::cartToPolar(src, src, dstMagnitude, dstAngle); // 直角坐标系转为极坐标系Mat dstx, dsty;cv::polarToCart(dstMagnitude, dstAngle, dstx, dsty); // 极坐标中计算笛卡尔坐标cv::magnitude(src, src, dstMagnitude); // 计算直角坐标系转换成极坐标系的幅值Mat dstPhase;cv::phase(src, src, dstPhase, false); // 对二维矢量场计算笛卡尔-极坐标转换的方位角Mat vecMat1, vecMat2, dstIcovar;cv::Mahalanobis(vecMat1, vecMat2, dstIcovar); // 计算两个向量的马氏距离
十、参考资料
机器视觉算法(第10期)----图像处理中64个常用的算子 - 灰信网(软件开发博客聚合)
相关文章:
OpenCV中常用算子
一、图像运算 Mat src, src1, src2, dst;// 图像运算 加 减 乘 除cv::add(src1, src2, dst); // 相加:src1src2cv::scaleAdd(src1, 1.0, src2, dst); // 相加:1.0*src1src2cv::addWeighted(src1, 0.3, src2, 0.7,…...
Android 11.0 系统限制上网系列之iptables用IOemNetd实现app某个时间段禁止上网的功能实现
1.前言 在11.0的系统rom定制化开发中,对于系统限制网络的使用,在system中netd网络这块的产品需要中,会要求设置app某个时间段禁止上网的功能, liunx中iptables命令也是比较重要的,接下来就来在IOemNetd这块实现app某个时间段禁止上网的的相关功能,就是在 系统中只能允许…...
【JavaSE】面向对象编程思想之继承
【本节目标】 1. 继承 2. 组合 目录 1. 为什么需要继承 2. 继承概念 3. 继承的语法 4. 父类成员访问 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. 子类构造方法 7. super和this 8. 再谈初始化 9. protected 关键字 10. 继承方式…...
Golang make和new的区别
make 和 new new函数 作用 分配内存设置零值返回指针 eg: type Student struct{name stringage int }func main(){//new 一个内建类型num : new(int)fmt.Println(*num) //打印:0//new一个自定义类型s : new(Student)s.name "yx"fmt.Prin…...
(前后端交互式)Ajax上传图片 + 更换背景图片
前后端交互图片文件 上传-图片 注意1:上传的图片必须在2MB以内 注意2:服务器端oss(阿里云对象存储)为了安全性,图片url网址不能直接在浏览器地址栏访问 请用img/背景图方式进行使用 上传图片的代码实现 \* 目标&#…...
自媒体常见玩法
有声小说转成视频 题材来源 喜马拉雅 工具 https://trace.moe/ 33台词找台词 文字转视频 题材来源 小说类APP书籍 音乐转视频...
【react】react生命周期钩子函数:
文章目录 一、生命周期概念:二、生命周期:三、挂载阶段(constructor > render > componentDidMount):四、更新阶段(render > componentDidUpdate):五、卸载阶段(componentWillUnmount …...
CRM系统哪些功能可以个性化定制?
不同的企业有着不同的业务流程和需求,因此在选型时就需要一款可以个性化定制的CRM系统。下面说说可以个性化定制的CRM系统的功能和优势。 如何实现个性化定制? Zoho CRM支持个性化定制,您可以创建自定义功能模块、字段以及业务流程…...
51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验二 LED闪烁
目录 前言 一、原理图及知识点介绍 二、代码分析 知识点四:delay(u16 i)这个函数为什么i1时,大约延时10us? 前言 已经是第二个实验了,上一个实验是点亮第一个LED灯,这个实验是LED的闪烁。 一、原理图及知识点介绍…...
PaperEdge 文档图像矫正
效果 地址: https://github.com/cvlab-stonybrook/PaperEdge...
入门NLTK:Python自然语言处理库初级教程
NLTK(Natural Language Toolkit)是一个Python库,用于实现自然语言处理(NLP)的许多任务。NLTK包括一些有用的工具和资源,如文本语料库、词性标注器、语法分析器等。在这篇初级教程中,我们将了解N…...
Android 死机问题学习笔记
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、死机系统简图二、死机的可能原因三、死机问题需要分析哪些数据四 、Java Backtrace 分析五、常见 Java backtrace 举例六、Native Backtrace七、Ke…...
企业内网终端安全无客户端准入控制技术实践
终端无代理/无客户端准入控制技术因其良好的用户体验而倍受创新企业的青睐。无代理/无客户端准入控制技术,顾名思义,是一种在网络中对终端实施访问控制的方法,无需依赖特定的客户端软件。 不同于银行、医院等传统行业的终端准入控制需求&…...
Android 开发代码规范
一. AndroidStudio开发工具规范 使用最新的稳定版本.统一文件的编码格式为utf-8. 清除每个类里面的无效的import导包.代码样式统一,比如,tab缩进4个空格,或者 tab size等如果没有特殊情况使用默认的配置即可。每行字数每行字符数不得超过 160 字符&…...
c语言(函数)
目录 何为函数 库函数 自定义函数 二分查找数组下标 链式访问 函数的声明 函数定义 递归 正向打印数字 打印字符个数 使用临时变量 递归(不使用临时变量) n的阶乘 一般形式 递归 斐波那契数 递归 正常做法 何为函数 在计算机科学中,子程序是一个…...
OPENCV C++(二)直方图+分离颜色通道+画圆画线画矩形
分离RGB彩图颜色通道 也就是把每种分量的亮度图提出来 vector<Mat> channels;split(image1, channels);Mat R channels.at(0);Mat G channels.at(1);Mat B channels.at(2); 这样R,G,B每个图就是这个图的颜色分量图了 图片的克隆,深拷贝! Mat…...
SpringBoot(2.7.x)中使用PageHelper
如何在SpringBoot中使用PageHelper 先添加依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.12</version> </dependency>SpringBoot 2.6.x…...
【HarmonyOS】API9网络buffer图片加载
【引言】 HarmonyOS中加载网络图片常用的方法是直接给Image组件添加图片的网络地址,申请网络权限ohos.permission.INTERNET后就可以通过url加载对应的图片了,如HarmonyOS官网中的写法: Image(https://www.example.com/example.JPG) 【问题概…...
【前端实习生备战秋招】—HTML 和 CSS面试题总结(二)
【前端实习生备战秋招】—HTML 和 CSS面试题总结(二) 1.有哪些方式可以对一个 DOM 设置它的 CSS 样式? 外部样式表,引入一个外部 css 文件内部样式表,将 css 代码放在 <head> 标签内部内联样式,将 c…...
操作系统知识点总结
操作系统知识点总结: 第一章:操作系统概述 1.1操作系统的概念: 操作系统是一种系统软件,与其他系统软件和应用软件不同,它有自己的基本特征。它的四大基本特征也就是并发,共享,虚拟,异步。 1.2操作系统的特征(四大基本特征): 并发: 这里我们要理解什么是并发,什么是…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
