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操作系统的特征(四大基本特征): 并发: 这里我们要理解什么是并发,什么是…...
Univer 预设模式 vs 插件模式:新手到底该选哪个?一次讲清区别、坑点和最佳实践
Univer 预设模式 vs 插件模式:从设计哲学到实战选择的深度解析 第一次接触 Univer 的开发者,往往会在官方文档的"预设模式"和"插件模式"两种集成方式前陷入选择困难。这就像站在自助餐厅的入口,一边是搭配好的套餐&#…...
TEKLauncher:如何用3个步骤彻底解决方舟游戏管理与MOD冲突问题?
TEKLauncher:如何用3个步骤彻底解决方舟游戏管理与MOD冲突问题? 【免费下载链接】TEKLauncher Launcher for ARK: Survival Evolved 项目地址: https://gitcode.com/gh_mirrors/te/TEKLauncher 你是否曾因为《方舟:生存进化》的MOD冲突…...
英雄联盟客户端美化神器:LeaguePrank全面使用指南与实战技巧
英雄联盟客户端美化神器:LeaguePrank全面使用指南与实战技巧 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 想要让你的英雄联盟客户端焕然一新吗?LeaguePrank是一款基于官方LCU API开发的免费开源工具…...
如何永久保存微信聊天记录:数据自主备份完整指南
如何永久保存微信聊天记录:数据自主备份完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …...
副篇:从元融合到意义工程学——DOS痕迹论的实证转化方案
副篇:从元融合到意义工程学 ——DOS痕迹论的实证转化方案 引言:诊断之后是什么 《全球元融合史——DOS历史唯物观》完成了一项诊断工作。它以“痕迹”为微观中介,重新描述了从狩猎采集到算法时代的意义生态系统演化,揭示了现代性意…...
ClickOnce部署避坑指南:解决.NET Framework 4.7.2系统必备组件本地化下载失败问题
1. ClickOnce部署中的.NET Framework多语言包问题 最近在用Visual Studio的ClickOnce技术部署一个多语言Windows应用时,遇到了一个让人头疼的问题。每次发布都会报错说找不到.NET Framework 4.7.2的英文和中文安装包。错误信息明确提示需要两个文件:NDP…...
ESP32锂电池电量检测实战:从引脚选择到低功耗优化(附完整电路图)
ESP32锂电池电量检测实战:从引脚选择到低功耗优化 在物联网设备开发中,锂电池供电方案的设计往往决定了产品的续航能力和用户体验。ESP32作为一款集成了Wi-Fi和蓝牙功能的低功耗芯片,其电池电量检测功能却常常让开发者陷入困境——ADC通道与W…...
Pixel Aurora Engine 集成SpringBoot实战:构建企业级AI创意应用后端
Pixel Aurora Engine 集成SpringBoot实战:构建企业级AI创意应用后端 1. 企业级AI创意应用的技术挑战 在数字化内容爆炸式增长的今天,企业内容创作平台面临着前所未有的挑战。传统人工设计模式已经难以满足海量、个性化、快速迭代的内容需求。以某电商平…...
MedGemma X-Ray效果展示:AI识别心脏轮廓增大与主动脉钙化
MedGemma X-Ray效果展示:AI识别心脏轮廓增大与主动脉钙化 1. 引言:AI医疗影像的新突破 今天要给大家展示一个让我眼前一亮的AI医疗影像分析工具——MedGemma X-Ray。这不是普通的图像识别软件,而是一个专门针对胸部X光片的智能分析平台&…...
Materials Studio8.0 Linux版安装避坑指南:JRE版本与libstdc++问题解决
Materials Studio 8.0 Linux版深度安装指南:从环境配置到疑难解析 在材料科学计算领域,BIOVIA Materials Studio作为一款集分子模拟与材料设计于一体的专业软件,其Linux版本安装常因系统环境差异导致各类兼容性问题。本文将系统梳理CentOS 7环…...
