在边缘检测算法中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应用学习笔记四的更多相关文章

  1. 平滑处理Smooth之图像预处理算法-OpenCV应用学习笔记三

    大清早的我们就来做一个简单有趣的图像处理算法实现,作为对图像处理算法学习的开端吧.之所以有趣就在于笔者把算法处理的各个方式的处理效果拿出来做了对比,给你看到原图和各种处理后的图像你是否能够知道那幅图对 ...

  2. 牛客网《BAT面试算法精品课》学习笔记

    目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...

  3. 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)

    注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...

  4. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 9894  Solved: 4561[Subm ...

  5. 【数据结构与算法Python版学习笔记】引言

    学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...

  6. CNN目标检测系列算法发展脉络——学习笔记(一):AlexNet

    在咨询了老师的建议后,最近开始着手深入的学习一下目标检测算法,结合这两天所查到的资料和个人的理解,准备大致将CNN目标检测的发展脉络理一理(暂时只讲CNN系列部分,YOLO和SSD,后面会抽空整理). ...

  7. 数据结构与算法C++描述学习笔记1、辗转相除——欧几里得算法

    前面学了一个星期的C++,以前阅读C++代码有些困难,现在好一些了.做了一些NOI的题目,这也是一个长期的目标中的一环.做到动态规划的相关题目时发现很多问题思考不通透,所以开始系统学习.学习的第一本是 ...

  8. 视频文件写入转换之图像处理-OpenCV应用学习笔记五

    在<笔记二>中我们做了视频播放和控制的实现,仅仅算是完成了对视频文件的读取操作:今天我们来一起练习下对视频文件的写入操作:格式转换. 实现功能: 打开一个视频文件play.avi,读取文件 ...

  9. NLTK学习笔记(四):自然语言处理的一些算法研究

    自然语言处理中算法设计有两大部分:分而治之 和 转化 思想.一个是将大问题简化为小问题,另一个是将问题抽象化,向向已知转化.前者的例子:归并排序:后者的例子:判断相邻元素是否相同(与排序). 这次总结 ...

随机推荐

  1. flexbox布局

    一.侧轴对齐伸缩项目--align-items 它充许调整伸缩项目在侧轴(也就是y轴)的对齐方式,主要包括以下几个值: flex-start/baseline:伸缩项目在侧轴起点边的外边距紧靠住该行在 ...

  2. css总结

    1. css中的role属性 html 里面的 role 本质上是增强语义性,当现有的HTML标签不能充分表达语义性的时候,就可以借助role来说明.通常这种情况出现在一些自定义的组件上,这样可增强组 ...

  3. Android获取时间

    java代码: import java.text.SimpleDateFormat;SimpleDateFormat formatter = new SimpleDateFormat ('yyyy年M ...

  4. X-Forwarded-For (IIS日志记录用户真实IP)

    参考:http://www.jbxue.com/article/7521.html 当IIS放在反向代理后面时,日志中的客户端ip是反向代理服务器的ip,不是用户的真实IP地址. 本文为大家介绍使用X ...

  5. STL学习笔记

    简介 STL(Standard Template Library),即标准模版库,涵盖了常用的数据结构和算法,并具有跨平台的特点.STL是C++标准函数库的一部分,如下图所示: STL含有容器.算法和 ...

  6. Daily Scrum 12.16

    今日完成任务: 完善了资源界面的UI设计:解决了PDF显示相同的问题:解决了下载时有时找不到文件的问题,因为上届建了upload和resource两个文件夹存文件,写代码时候写乱套了. 明日任务: 黎 ...

  7. 【转】Nginx服务器详细配置含注释

    #使用的用户和组 user www www; #指定工作衍生进程数(一般等于CPU的总核数或总核数的两倍) worker_processes 8; #指定错误日志存放的路径,错误日志的记录级别可为de ...

  8. 硬浮点 VFP

    http://blog.chinaunix.net/uid-27875-id-3449290.html   编译器对VFP的支持一个浮点数操作最后是翻译成VFP指令,还是翻译成fpa,或者是softf ...

  9. maven SpringMVC easyUI项目创建

    在Eclipse中使用Maven创建SpringMVC项目,项目所需软件及工具可以在官网下载.Maven.Nexus及Eclipse集成Maven等到此配置完毕. 1.Maven创建Web项目. 打开 ...

  10. awk 的一些用法

    awk,我觉得是Linux里面处理文本最精妙的命令,它是一个行处理的命令,它最初级的用法是:给定一些简单的pattern,然后按照这个pattern 去搜索匹配的行.它的高级用法是用awk来编程,除了 ...