【openCV入门之二】 快速上手
今天学习了openCV的三个例子,分别是图像腐蚀,图像模糊,还有图像边缘检测,三个例子分别用了openCV提供的相关运算函数,实现基本形态学运算。
首先第一个例子是 - 图像腐蚀,腐蚀和膨胀是图像形态学处理的最基本操作。
膨胀是指将一些图像或是图像中的一部分区域,我们称之为A的区域与核- 我们称之为B的区域进行卷积。膨胀用于求局部的最大值。
腐蚀则是膨胀的反操作,腐蚀操作要计算区域像素的最小值。
简单的来说腐蚀可以分割独立的图像元素,而膨胀则是用于连接相邻的元素。
相关的图形形态学先不深究,直接上程序:
VS2010新建控制台项目,新建cpp文件,并且放入用于测试的图片“1.jpg”,记住一定要放在和cpp文件同一个目录下
<span style="font-size:14px;">#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>using namespace cv;int main()
{//载入原图Mat srcImage = imread("1.jpg");//显示效果imshow("【原图】腐蚀操作",srcImage);//运行腐蚀操作Mat element = getStructuringElement(MORPH_RECT,Size(15,15));Mat dstImage;erode(srcImage,dstImage,element);//显示效果图imshow("【效果图】腐蚀操作",dstImage);waitKey(0);return 0;
}</span>
代码中的函数 getStructuringElement()函数,返回值:指向指定形状和尺寸的结构元素。
第一个参数:表示内核的形状,有三种形状可选,矩形: MORPH_RECT交叉形: MORPH_CROSS椭圆形: MORPH_ELLIPSE,
第二个参数: 表示内核的尺寸,
第三个参数: 表示锚点的位置。
以及关键的函数erode()
第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。图像通道的数量可以是任意的,但图像深度应为CV_8U,CV_16U,CV_16S,CV_32F或 CV_64F其中之一。
第二个参数: OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。
第三个参数: InputArray类型的kernel,腐蚀操作的内核。若为NULL时,表示的是使用参考点位于中心3x3的核。我们一般使用函数 getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。
第四个参数: Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于单位(element)的中心,我们一般不用管它。
第五个参数: int类型的iterations,迭代使用erode()函数的次数,默认值为1。
第六个参数: int类型的borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_DEFAULT。
第七个参数: const Scalar&类型的borderValue,当边界为常数时的边界值,有默认值morphologyDefaultBorderValue(),一般不用。
上例子中用到前面三个参数,后面四个参数使用的是默认值。
运行看效果图:
第二个例子描述如何模糊一副图片
图像模糊也是图像处理的基本操作
同样VS2010新建控制台项目,新建cpp文件,并且放入用于测试的图片“1.jpg”,记住一定要放在和cpp文件同一个目录下
<span style="font-size:14px;">#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>using namespace cv;int main()
{//载入原图Mat srcImage = imread("1.jpg");//显示效果imshow("【原图】均值滤波",srcImage);//机型均值滤波操作Mat dstImage;blur(srcImage,dstImage,Size(7,7));//显示效果图imshow("【效果图】均值滤波",dstImage);waitKey(0);return 0;
}
</span>
图像模糊有几种方法,例如平均模糊,高斯模糊,中值滤波,双边滤波等,
opencv针对这几种方法都提供了相关的函数来进行模糊操作,我们的例子中用到了
hlur()方法,即均值滤波:
blur( src, dst, Size( i, i ), Point(-1,-1) )
第一个参数:src:原始图像
第一个参数:dst:模糊图像
第一个参数:Size(i, i ):滤波模板大小
第一个参数:Point(-1,-1):中心点定位
上效果图:
第三个例子是边缘检测
所谓边缘是指其周围像素灰度急剧变化的那些象素的集合,它是图像最基本的特征。边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。
同样VS2010新建控制台项目,新建cpp文件,并且放入用于测试的图片“1.jpg”,记住一定要放在和cpp文件同一个目录下
<span style="font-size:14px;">#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>using namespace cv;int main()
{//载入原图Mat srcImage = imread("1.jpg");//显示效果imshow("【原图】Canny边缘检测",srcImage);//机型均值滤波操作Mat edge,grayImage;//[1]将原图像转换为灰度图像cvtColor(srcImage,grayImage,CV_BGR2GRAY);//[2]先用3x3的北河来降噪blur(grayImage,edge,Size(3,3));//[3] 运行Canny 算子Canny(edge,edge,3,9,3);//[4]显示效果图imshow("【效果图】Canny边缘检测",edge);waitKey(0);return 0;
}</span>
使用的例子中用Canny算子来进行边缘检测,通过
函数介绍:
Canny(InputArrayimage,OutputArray edges, double threshold1, double threshold2, intapertureSize=3,bool L2gradient=false )
第一个参数,InputArray类型的image,输入图像,即源图像,填Mat类的对象即可,且需为单通道8位图像。
第二个参数,OutputArray类型的edges,输出的边缘图,需要和源图片有一样的尺寸和类型。
第三个参数,double类型的threshold1,第一个滞后性阈值。
第四个参数,double类型的threshold2,第二个滞后性阈值。
第五个参数,int类型的apertureSize,表示应用Sobel算子的孔径大小,其有默认值3。
第六个参数,bool类型的L2gradient,一个计算图像梯度幅值的标识,有默认值false。
例子效果图:
【openCV入门之二】 快速上手相关推荐
- 0基础入门,如何快速上手Python?
0基础入门,如何快速上手pythpn 新的改变 因为清晰易读的风格,广泛的适用性,python已经成为最受欢迎的编程语言之一,在TIOBE排行榜位居第四,是名副其实的人工智能第一语言. python ...
- 云开发系列课程让你从入门到精通快速上手Serverless和云开发技术
简介:云开发系列课程主要介绍了从入门到精通快速上手Serverless和云开发技术.学习内容涵盖云开发协同.云函数.云数据库.多媒体托管.前后端一体化框架等Serverless Web开发必备知识.希 ...
- matlab如何测两点的角度_【邢不行|量化小讲堂系列01-Python量化入门】如何快速上手使用Python进行金融数据分析...
引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 [必读文章]: [邢不 ...
- 通过亚马逊云新用户入门学习计划快速上手云上无服务器化的MySQL数据库
前言 之前一直使用云服务器一直都是使用实例来使用MySQL数据库,因为刚好又能学习Linux的知识,但是通过购买实例服务来充当数据库,不仅资源不能得到充分应用,也会有操作麻烦容易出这样那样的问题. 今 ...
- 树莓派入门萌新快速上手指南
树莓派入门第一步:购买一个树莓派 文末有我分享的关于树莓派的资料以及系统镜像,里面有我在文中提到的系统和软件. 树莓派又称卡牌电脑,可外接显示器,键盘,鼠标,相信既然大家都打算买树莓派了,那肯定是已经 ...
- Eclipse入门操作之快速上手、Eclipse的快捷键:
提示:目前公司开发大部分都是用IDEA,所以可以直接上手学习IDEA,如果有需要的话,我想这是最快上手的一篇文章了.这里谈论的是:Eclipse安装好之后的基础上手操作,没有安装过程. 目录 前言 一 ...
- 【嵌入式Linux驱动入门】二、上手Hello驱动,了解驱动开发流程
我们知道他们在说谎,他们也知道他们在说谎,他们知道我们知道他们在说谎,我们也知道他们知道我们知道他们在说谎,但是他们依然在说谎. 文章目录 一.Linux驱动分类 二.Linux驱动初探 三.He ...
- RabbitMQ 延迟队列-对于入门来说可以快速上手
RabbitMQ 延迟队列-非常非常实用 RabbitMQ 延迟队列-非常非常实用 一.使用场景 二.消息延迟推送的实现 三.项目具体实现 RabbitMQ 延迟队列-非常非常实用 一.使用场景 ...
- 三万字速通SSM框架入门知识点,快速上手CRUD
最新文章
- 清华鲁继文团队提出DynamicViT:一种高效的动态稀疏化Token的ViT
- 2019年《自然》迎新子刊:机器智能、新陈代谢和综述物理
- python基础题-python基础练习题(一)
- htc g12刷机的成功经验--只面向小白
- 集成服务入门(实验10)使用事务和检查点
- 解决kubectl get pods时 No resources found.问题
- SQL Server 备份与恢复之八:还原数据库
- 横跨7个版本的OpenStack无感知热升级在360的落地与实践
- PHP学习总结(6)——PHP入门篇之PHP语句结束符
- python生成时间戳_Python 获取时间戳
- shell - 查看天气
- mysql 触发器条件判断偶尔失效_mysql┃多个角度说明sql优化,让你吊打面试官!...
- 一题多解 —— linux 日志文件(log)reload 重新载入
- 苹果x和xs买哪个好_苹果12和苹果11哪个值得买-苹果12和11哪个更值得买
- python 云计算开发是什么_云计算是什么?云计算开发学习路线
- 基于php网上书店存在问题及解决方案,基于PHP的网上书店系统设计与实现
- spark another attempt succeeded
- 小小粉刷匠(区间dp)
- html打字机特效,[JS插件]酷炫的打字机效果: Typed.js
- DOJP1520星门跳跃题解
热门文章
- 如何正确配置与使用GradleMCP918并安装Optifine
- 【夸夸其谈】游戏中的货币是个什么玩意儿
- 【GIS】Shp与JSON格式数据导入converter与sft格式
- python计算库存_python电商库存 python编程
- Messari报告:区块链游戏的生态系统发生了哪些转变?
- 京东自媒体平台京东号头条特卖的关系
- jonathonf/python-3.6/ubuntu xenial/main amd64 Packages 403 Forbidden 解决
- Pnnn:并行查询从属进程
- MySQL Navicat Premium 保存的SQL在哪里?
- HDU 5575 Discover Water Tank