Canny边缘检测及图像缩放之图像处理算法-OpenCV应用学习笔记四

在边缘检测算法中Canny颇为经典,我们就来做一下测试,并且顺便实现图像的尺寸放缩。
实现功能:
直接执行程序得到结果如下:将载入图像显示在窗口in内,同时进行图像两次缩小一半操作将结果显示到i1,i2窗口内,Canny边缘提取结果显示在i3。

函数精析:
void cvPyrDown(const CvArr* src, CvArr* dst, int filter=CV_GAUSSIAN_5x5 )
- 使用Gaussian金字塔分解输入图像向下采样
- dst:输出指定尺寸图像,跟原图像同类型
- 首先该函数与内核卷积,然后向下采样删除偶数行列信息
cvCanny(src, dst, double threshold1, double threshold2, int apertureSize=3 )
- 发现输入图像的边缘并且输出边缘图像,仅仅支持单通道8位图像
- 输出图像尺寸和类型与原图像相同
- 阈值1和阈值2中小阈值用来控制边缘连接,大阈值用在突出边缘的初始分割
- 核心步骤:高斯滤波-一阶偏导有限差分计算梯度-双阈值算法检测和连接边缘-高斯平滑
附源代码:
#include "stdafx.h"
#include"cv.h"
#include"highgui.h" /* 定义图像放缩函数doPyrDown(原图像,高斯5*5滤波器) */
IplImage* doPyrDown(IplImage* in,int filter = CV_GAUSSIAN_5x5)
{
IplImage* out = cvCreateImage(cvSize(in->width/,in->height/),in->depth,in->nChannels);
/*使用Gaussian金字塔分解输入图像向下采样*/
/*首先该函数与内核卷积,然后向下采样删除偶数行列信息*/
cvPyrDown(in,out);
return(out);
}; /* 定义边缘检测函数doCanny(原图像,若边缘连接阈值,强边缘分割阈值,索贝尔算子内核尺寸) */
IplImage* doCanny(IplImage* in,double lowThresh,double highThresh,double aperture)
{
if(in->nChannels != )//仅支持单通道图像
return();
IplImage* out = cvCreateImage(cvGetSize(in),IPL_DEPTH_8U,); //找输入图像的边缘并输出图像中标识着这些边缘
cvCanny(in ,out,lowThresh,highThresh,aperture);
return(out);
}; int _tmain(int argc, _TCHAR* argv[])
{
IplImage* in = cvLoadImage("lena.jpg",); //载入原图像
IplImage* img1 = doPyrDown( in, CV_GAUSSIAN_5x5);//图像尺寸缩小一半
IplImage* img2 = doPyrDown(img1,CV_GAUSSIAN_5x5);//继续缩小一半
IplImage* img3 = doCanny(img2,,,);//边缘检测 cvNamedWindow("in");
cvNamedWindow("i1");
cvNamedWindow("i2");
cvNamedWindow("i3"); cvShowImage("in",in);
cvShowImage("i1",img1);
cvShowImage("i2",img2);
cvShowImage("i3",img3);
cvWaitKey();
cvDestroyWindow("in");
cvDestroyWindow("i1");
cvDestroyWindow("i2");
cvDestroyWindow("i3");
return ;
}
Canny边缘检测及图像缩放之图像处理算法-OpenCV应用学习笔记四的更多相关文章
- 平滑处理Smooth之图像预处理算法-OpenCV应用学习笔记三
大清早的我们就来做一个简单有趣的图像处理算法实现,作为对图像处理算法学习的开端吧.之所以有趣就在于笔者把算法处理的各个方式的处理效果拿出来做了对比,给你看到原图和各种处理后的图像你是否能够知道那幅图对 ...
- 牛客网《BAT面试算法精品课》学习笔记
目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...
- 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)
注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
- 【数据结构与算法Python版学习笔记】引言
学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...
- CNN目标检测系列算法发展脉络——学习笔记(一):AlexNet
在咨询了老师的建议后,最近开始着手深入的学习一下目标检测算法,结合这两天所查到的资料和个人的理解,准备大致将CNN目标检测的发展脉络理一理(暂时只讲CNN系列部分,YOLO和SSD,后面会抽空整理). ...
- 数据结构与算法C++描述学习笔记1、辗转相除——欧几里得算法
前面学了一个星期的C++,以前阅读C++代码有些困难,现在好一些了.做了一些NOI的题目,这也是一个长期的目标中的一环.做到动态规划的相关题目时发现很多问题思考不通透,所以开始系统学习.学习的第一本是 ...
- 视频文件写入转换之图像处理-OpenCV应用学习笔记五
在<笔记二>中我们做了视频播放和控制的实现,仅仅算是完成了对视频文件的读取操作:今天我们来一起练习下对视频文件的写入操作:格式转换. 实现功能: 打开一个视频文件play.avi,读取文件 ...
- NLTK学习笔记(四):自然语言处理的一些算法研究
自然语言处理中算法设计有两大部分:分而治之 和 转化 思想.一个是将大问题简化为小问题,另一个是将问题抽象化,向向已知转化.前者的例子:归并排序:后者的例子:判断相邻元素是否相同(与排序). 这次总结 ...
随机推荐
- [转]Oracle 经验集
-- 转换字符串为日期格式 to_date('2011-12-30 11:54:30','yyyy-MM-dd:hh24:mi:ss') Oracel 用 C# 连接,Microsoft 自带的 Sy ...
- AndroidStudio关联svn并上传代码到svn服务器上
打开AndroidStudio,按Ctrl+Shif+S快捷键,进入Settings设置页面.如上图所示,找到Version Control->点击Subversion->右边框口中勾选U ...
- hdu 2586 How far away ?(离线求最近公共祖先)
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #i ...
- pycharm5新版注册
##注册方法1### 0x1 ,安装 0x2 , 调整时间到2038年. 0x3 ,申请30天试用 0x4, 退出pycharm 0x5, 时间调整回来. ##注册方法2### 注册方法: 在 注册时 ...
- 深入理解Java虚拟机(二)、Java对象的创建,内存布局和访问定位
对象的创建: Object obj = new Object(); 常量池中是否有Ljava.lang.Object
- js为空的几种情况
1.null,对象不存在 var ii= document.getElementById("id"); alert(ii); 当前页面不存在id对象 2. undefined v ...
- LINUX 如何开放端口和关闭端口/jps/sudo命令
1 在java的根目录下用java的jps查看:============================================================================ ...
- [05]APUE:标准 I/O 库
[a] setvbuf / setbuf #include <stdio.h> int setvbuf(FILE *restrict fp, char *restrict buf, int ...
- easyui form表单提交应注意的问题
今天在一个项目中用到表单提交,代码如下: $('#CreateForm').form('submit', { onSubmit: function () { ajaxCreateFrom(this, ...
- SQL Server客户端登录名与数据库用户关联
数据库迁移之后,在新的SQL Server客户端工具设置关联时,往往会报错: 用户.组或角色 'XXX' 在当前数据库中已存在. 解决方法: 首先介绍一下sql server中“登录”与“用户”的区别 ...