今天学习了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入门之二】 快速上手相关推荐

  1. 0基础入门,如何快速上手Python?

    0基础入门,如何快速上手pythpn 新的改变 因为清晰易读的风格,广泛的适用性,python已经成为最受欢迎的编程语言之一,在TIOBE排行榜位居第四,是名副其实的人工智能第一语言. python ...

  2. 云开发系列课程让你从入门到精通快速上手Serverless和云开发技术

    简介:云开发系列课程主要介绍了从入门到精通快速上手Serverless和云开发技术.学习内容涵盖云开发协同.云函数.云数据库.多媒体托管.前后端一体化框架等Serverless Web开发必备知识.希 ...

  3. matlab如何测两点的角度_【邢不行|量化小讲堂系列01-Python量化入门】如何快速上手使用Python进行金融数据分析...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 [必读文章]: [邢不 ...

  4. 通过亚马逊云新用户入门学习计划快速上手云上无服务器化的MySQL数据库

    前言 之前一直使用云服务器一直都是使用实例来使用MySQL数据库,因为刚好又能学习Linux的知识,但是通过购买实例服务来充当数据库,不仅资源不能得到充分应用,也会有操作麻烦容易出这样那样的问题. 今 ...

  5. 树莓派入门萌新快速上手指南

    树莓派入门第一步:购买一个树莓派 文末有我分享的关于树莓派的资料以及系统镜像,里面有我在文中提到的系统和软件. 树莓派又称卡牌电脑,可外接显示器,键盘,鼠标,相信既然大家都打算买树莓派了,那肯定是已经 ...

  6. Eclipse入门操作之快速上手、Eclipse的快捷键:

    提示:目前公司开发大部分都是用IDEA,所以可以直接上手学习IDEA,如果有需要的话,我想这是最快上手的一篇文章了.这里谈论的是:Eclipse安装好之后的基础上手操作,没有安装过程. 目录 前言 一 ...

  7. 【嵌入式Linux驱动入门】二、上手Hello驱动,了解驱动开发流程

      我们知道他们在说谎,他们也知道他们在说谎,他们知道我们知道他们在说谎,我们也知道他们知道我们知道他们在说谎,但是他们依然在说谎. 文章目录 一.Linux驱动分类 二.Linux驱动初探 三.He ...

  8. RabbitMQ 延迟队列-对于入门来说可以快速上手

    RabbitMQ 延迟队列-非常非常实用 RabbitMQ 延迟队列-非常非常实用 一.使用场景 二.消息延迟推送的实现 三.项目具体实现 RabbitMQ 延迟队列-非常非常实用 一.使用场景 ​ ...

  9. 三万字速通SSM框架入门知识点,快速上手CRUD

最新文章

  1. 清华鲁继文团队提出DynamicViT:一种高效的动态稀疏化Token的ViT
  2. 2019年《自然》迎新子刊:机器智能、新陈代谢和综述物理
  3. python基础题-python基础练习题(一)
  4. htc g12刷机的成功经验--只面向小白
  5. 集成服务入门(实验10)使用事务和检查点
  6. 解决kubectl get pods时 No resources found.问题
  7. SQL Server 备份与恢复之八:还原数据库
  8. 横跨7个版本的OpenStack无感知热升级在360的落地与实践
  9. PHP学习总结(6)——PHP入门篇之PHP语句结束符
  10. python生成时间戳_Python 获取时间戳
  11. shell - 查看天气
  12. mysql 触发器条件判断偶尔失效_mysql┃多个角度说明sql优化,让你吊打面试官!...
  13. 一题多解 —— linux 日志文件(log)reload 重新载入
  14. 苹果x和xs买哪个好_苹果12和苹果11哪个值得买-苹果12和11哪个更值得买
  15. python 云计算开发是什么_云计算是什么?云计算开发学习路线
  16. 基于php网上书店存在问题及解决方案,基于PHP的网上书店系统设计与实现
  17. spark another attempt succeeded
  18. 小小粉刷匠(区间dp)
  19. html打字机特效,[JS插件]酷炫的打字机效果: Typed.js
  20. DOJP1520星门跳跃题解

热门文章

  1. 如何正确配置与使用GradleMCP918并安装Optifine
  2. 【夸夸其谈】游戏中的货币是个什么玩意儿
  3. 【GIS】Shp与JSON格式数据导入converter与sft格式
  4. python计算库存_python电商库存 python编程
  5. Messari报告:区块链游戏的生态系统发生了哪些转变?
  6. 京东自媒体平台京东号头条特卖的关系
  7. jonathonf/python-3.6/ubuntu xenial/main amd64 Packages 403 Forbidden 解决
  8. Pnnn:并行查询从属进程
  9. MySQL Navicat Premium 保存的SQL在哪里?
  10. HDU 5575 Discover Water Tank