OpenCV——常用函数
getStructuringElement函数会返回指定形状和尺寸的结构元素。
Mat getStructuringElement(int shape, Size esize, Point anchor = Point(-1, -1));
这个函数的第一个参数表示内核的形状,有三种形状可以选择。
矩形:MORPH_RECT;
交叉形:MORPH_CROSS;
椭圆形:MORPH_ELLIPSE;
第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。element形状唯一依赖锚点位置,其他情况下,锚点只是影响了形态学运算结果的偏移。
erode(const Mat &src, Mat &dst, Mat kernel, Point anchor=Point(-1,-1), int iterations=1)
- src:輸入圖,可以多通道,深度可為CV_8U、CV_16U、CV_16S、CV_32F或CV_64F。
- dst:輸出圖,和輸入圖尺寸、型態相同。
- kernel:結構元素,如果kernel=Mat()則為預設的3×3矩形,越大侵蝕效果越明顯。
- anchor:原點位置,預設為結構元素的中央。
- iterations:執行次數,預設為1次,執行越多次侵蝕效果越明顯。
dilate(const Mat &src, Mat &dst, Mat kernel, Point anchor=Point(-1,-1), int iterations=1)
- src:輸入圖,可以多通道,深度可為CV_8U、CV_16U、CV_16S、CV_32F或CV_64F。
- dst:輸出圖,和輸入圖尺寸、型態相同。
- kernel:結構元素,如果kernel=Mat()則為預設的3×3矩形,越大膨脹效果越明顯。
- anchor:原點位置,預設為結構元素的中央。
- iterations:執行次數,預設為1次,執行越多次膨脹效果越明顯。
threshold( src, dst, thresh, maxval, type) 二值化
去掉噪,例如过滤很小或很大像素值的图像点。
src:原图像。
dst:结果图像。
thresh:当前阈值。
maxVal:最大阈值,一般为255.
thresholdType:阈值类型,主要有下面几种:
掩膜(mask)
数字图像处理中,掩模为二维矩阵数组,有时也用多值图像,图像掩模主要用于:
①提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
②屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
③结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
④特殊形状图像的制作。
CV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
CV_EXPORTS_W void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
以上是两个函数Opencv内的使用方式。主要是好奇 “按位与” 和 “按位或” 这两个函数对于uchar类型的输入的输出是什么样的。
//mask和mask2做输入,r来存储输出Mat mask(img.rows,img.cols, CV_8UC1, Scalar::all(25));Mat mask2(img.rows, img.cols, CV_8UC1, Scalar::all(125));Mat r1(img.rows, img.cols, CV_8UC1, Scalar::all(0));Mat r2(img.rows, img.cols, CV_8UC1, Scalar::all(0));bitwise_and(mask, mask2, r1);bitwise_or(mask, mask2, r2);for (int i = 0; i < mask.rows; i++){for (int j = 0; j < mask.cols; j++){int a = r1.at<uchar>(i, j);int b = r2.at<uchar>(i, j);cout << "r1 " << a<< " r2 " << b<< endl;system("pause");}}
结果显示
a=25;
b=125;
函数会把两个值中较小的那一个当成“0”,较大的那一个当成“1”,来进行逻辑操作。
absdiff(mat1, mat2, absDiff) 计算两个矩阵差的绝对值
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR) 改变尺寸
。src 输入图
。dst 输出图,形态和输入图相同,当dsize不等于0,输出图尺寸会和dsize相同,当dsize等于0,输出图尺寸会由输入图尺寸、fx、fy计算而得
。dsize 输出尺寸,当输入为0时,fx、fy皆不可为0,dsize = Size(round(fxsrc.cols),round(fysrc.rows))
。fx 水平缩放比例,当输入为0时,fx=(double)dsize.width/src.cols
。fy 垂直缩放比例,当输入为0时,fy=(double)dsize.height/src.rows
。interpolation 内插方式 内插方式有
a). CV_INTER_NEAREST 最邻近插值点法
b). CV_INTER_LINEAR 双线性插值法
c).CV_INTER_AREA 邻域像素再取样插补
d).CV_INTER_CUBIC 双立方插补,4*4大小的补点
inRange() 可实现二值化功能(这点类似threshold()函数)
关键的是可以同时针对多通道进行操作,使用起来非常方便!主要是将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0),该功能类似于之间所讲的双阈值化操作。
函数原型(C++):
void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);
void mixChannels (const Mat* src , int nsrc , Mat* dst , int ndst , const int* fromTo , size_t npairs ); mixChannels主要就是把输入的矩阵(或矩阵数组)的某些通道拆分复制给对应的输出矩阵(或矩阵数组)的某些通道中,其中的对应关系就由fromTo参数制定
src – 输入矩阵的向量(可以理解成一队矩阵),所有矩阵必须有相同的大小和深度。
nsrcs– 输入矩阵的个数。
dst– 输出矩阵的向量。所有的矩阵必须事先分配空间(如用create),大小和深度须与输入矩阵等同。
ndsts– 输出矩阵的个数。
fromTo – 序号对向量,用来决定哪个通道被拷贝。
void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0); 画椭圆
椭圆中心为点center,并且大小位于矩形 axes 内,椭圆旋转角度为 angle, 扩展的弧度从 0 度到 360 度,图形颜色为 Scalar(x, y,z),线宽 (thickness)为 1,线型(lineType)为 8 (8 联通线型)。
void circle(InputOutputArray img, Point center, int radius, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0); 画圆
img :表示输入的图像
center: 圆心坐标
radius: 圆的半径
color:Scalar类型,表示圆的颜色,例如蓝色为Scalar(255,0,0)
thickness:线的宽度
lineType:线的类型,(默认为8联通型)
OpenCV——常用函数相关推荐
- opencv常用函数整理
opencv常用函数整理 一.常见函数整理 1.1 cv2.resize函数(图像size重定义) 1.2 cv2.getStructuringElement函数(构造卷积核) 1.3.cv2.put ...
- OpenCV | OpenCv常用函数(代码类)
博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 俗语云:好记性不如烂笔头 //用到 ...
- 干货|219个opencv常用函数汇总
点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨AmosLLc 来源丨新机器视觉 作者为CSDN博主「AmosLLc」 原文链接:https: ...
- opencv常用函数,QT中Mat与QImage的转换
一.opencv简介 opencv是一个跨平台计算机视觉和机器学习软件库,可以运行在Linux.Windows.Android和Mac OS操作系统上,实现了图像处理和计算机视觉方面的很多通用算法. ...
- 219个opencv常用函数汇总
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 1.cvLoadImage:将图像文件加载至内 ...
- OpenCV常用函数记载
在实际经常用到OpenCV,这个库的函数多,功能强大,这篇博客主要用于记载自己在平时用到的一些OpenCV中的一些函数和方法.随时用到随时记载. 一.Mat类相关的操作 二.矩阵操作 1.opencv ...
- OpenCV 常用函数汇总(normalize、getStructuringElement、erode、dilate)
简单认知 Mat 认知 取值类型和范围 CV_8U 8位无符号整数 0~255 CV_8S 8位符号整数 -128~127 CV_16U 16位无符号整数 0~65535 CV_16S 16位符号整数 ...
- OpenCV常用函数极简简介
1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4.cvWaitKey:使程序 ...
- 基于C++的OpenCV常用函数
C++版本的好处: 1.在于可以尽量避免使用指针这种危险的东西: 2.不用费心去release资源了,因为在其destructor里面,系统会自动帮你搞定. 3.在某些情况下会比C版本运行速度快. 在 ...
- opencv常用函数
给源图像增加边界 cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value) src:源图像 top,bottem,left, ...
最新文章
- mysql $区别_mysql 与oracle区别
- 有人要在「动物森友会」上开AI学术会议,我看你们就是在家想玩游戏吧
- 藏獒当初为何成为“神话”,如今是谁毁了昔日藏獒的神话?
- 【具体使用实例】Rall封装线程(C\C++)
- OC类导入Swift工程演示
- 三个实用的提升网页性能技巧
- 密码机 密钥管理项目安装配置 从零开始
- 程序员的搞笑日常:写给1024的程序员们,现在的你们还在加班吗?
- 【英语学习】【Level 08】U04 What I love L2 My favorite sport
- C++单例实现及回收(转)
- 【ubuntu】出现device not managed连接不上网络
- ubunt 文件permission denied问题的解决
- 于群matlab仿真,33637《MATLAB-Simulink电力系统建模与仿真》于群(实例程序)
- Qt 局域网聊天工具
- PMP 考点 第十章 项目沟通管理
- mysql压缩修复数据库_压缩修复Access数据库
- ElasticSearch 7.10.1 集群搭建
- 公民委托诉讼代理人的注意事项
- python 新闻摘要_每日新闻摘要:随着机器取代工人,黄金一日即将推出
- Win11如何添加默认打印机?
热门文章
- VUE table下载XLSX文件
- 谷粒商城高级篇(39)——认证服务之验证码注册
- 刀剑神域:突破界限I
- linux查看硬盘插槽_Linux下查看CPU型号,内存大小,硬盘空间的命令(详解)
- C# 斑马打印机USB接口实现打印各种类型的码
- Linux下图片 jpg、png、gif 与 eps 格式的相互转换
- 八爪鱼批量爬取html中的数据,批量采集网页数据 - 八爪鱼采集器
- STM32-ADC模数转换
- python识别图片文字_python实现简单图片文字识别翻译OCR
- (伪)点到线段的距离 C++