Canny边缘检测

图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘
函数原型:

    void cvCanny(

      const CvArr* image,              //第一个参数表示输入图像,必须为单通道灰度图
      CvArr* edges,                      //第二个参数表示输出的边缘图像,为单通道黑白图
      double threshold1,
      double threshold2,               //第三个参数和第四个参数表示阈值,这二个阈值中当中的小阈值用来控制边缘连接,
                                                  大的阈值用来控制强边缘的初始分割即如果一个像素的梯度大与上限值,则被认为
                                                  是边缘像素,如果小于下限阈值,则被抛弃。如果该点的梯度在两者之间则当这个
                                                  点与高于上限值的像素点连接时我们才保留,否则删除。
      int aperture_size=3              //第五个参数表示Sobel 算子大小,默认为3即表示一个3*3的矩阵。Sobel 算子与
                                                  高斯拉普拉斯算子都是常用的边缘算子
    );
    
    函数功能:创建trackbar并添加到指定窗口

    函数原型:

    intcvCreateTrackbar(

        const char* trackbar_name,                     //第一个参数表示该trackbar的名称。
        const char* window_name,                      //第二个参数表示窗口名称,该trackbar将显示在这个窗口内。
        int* value,                                              //第三个参数表示创建时滑块的位置。
        int count,                                               //第四个参数表示滑块位置的最大值,最小值固定为0。
        CvTrackbarCallback on_change                 //第五个参数表示回调函数。当滑块位置有变化时,系统会调用该回调函数。
    );
    注:被创建的trackbar默认显示在指定窗口的顶端,可以通过函数cvGetTrackbarPos()来获取
    trackbar显示的位置信息,以及通过函数cvSetTrackbarPos()来重新设置trackbar的显示位置。

    <CvTrackbarCallback>
    函数功能:cvCreateTrackbar()函数所使用的回调函数

    函数定义:
    typedef void (CV_CDECL *CvTrackbarCallback)(int pos)

    函数说明:
    当trackbar位置被改变的时,系统会调用这个回调函数,并将参数pos设置为表示trackbar位置的数值。

#include "stdafx.h"
#include "iostream"
using namespace std;
#include "opencv2/opencv.hpp"
IplImage *pGrayImage = NULL;
IplImage *pCannyImage = NULL; const char *pImagePath = "E:/C_VC_code/Text_Photo/girl001.jpg";
const char *pGrayWindowsTitle = "原图";
const char *pCannyWindowsTitle = "边缘检测图";
const char *pWindowsToolBarTitle = "阀值";
void onCallBack(int pos)
{
//Canny check
cvCanny(pGrayImage, pCannyImage, pos, pos*, );
cvShowImage(pCannyWindowsTitle, pCannyImage);
}
int main()
{
//load gray image from srcouce file image
pGrayImage = cvLoadImage(pImagePath, CV_LOAD_IMAGE_GRAYSCALE);
pCannyImage = cvCreateImage(cvGetSize(pGrayImage), IPL_DEPTH_8U,); //create window
cvNamedWindow(pGrayWindowsTitle,CV_WINDOW_AUTOSIZE);
cvNamedWindow(pCannyWindowsTitle,CV_WINDOW_AUTOSIZE); //creat slide bar
int pos = ;
cvCreateTrackbar(pWindowsToolBarTitle, pCannyWindowsTitle, &pos, ,onCallBack);
onCallBack(); cvShowImage(pGrayWindowsTitle,pGrayImage);
cvShowImage(pCannyWindowsTitle,pCannyImage); cvWaitKey();
cvDestroyWindow(pCannyWindowsTitle);
cvDestroyWindow(pGrayWindowsTitle);
cvReleaseImage(&pGrayImage);
cvReleaseImage(&pCannyImage);
return ;
}

OpenCV图像Canny边缘检测的更多相关文章

  1. OpenCV笔记(3)(Canny边缘检测、高斯金字塔、拉普拉斯金字塔、图像轮廓、模板匹配)

    一.Canny边缘检测 Canny边缘检测是一系列方法综合的结果.其中主要包含以下步骤: 1.使用高斯滤波器,平滑图像,滤除噪声. 2.计算图像中每个像素点的梯度强度和方向. 3.应用非极大值抑制(N ...

  2. OpenCV: Canny边缘检测算法原理及其VC实现详解(转载)

    原文地址:http://blog.csdn.net/likezhaobin/article/details/6892176 原文地址:http://blog.csdn.net/likezhaobin/ ...

  3. openCV(四)---Canny边缘检测

    图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘. 直接上代码,函数简介都在代码注释中 //canny边缘检测 -(void) ...

  4. 基于opencv下对视频的灰度变换,高斯滤波,canny边缘检测处理,同窗体显示并保存

    如题:使用opencv打开摄像头或视频文件,实时显示原始视频,将视频每一帧依次做灰度转换.高斯滤波.canny边缘检测处理(原始视频和这3个中间步骤处理结果分别在一个窗口显示),最后将边缘检测结果保存 ...

  5. Python+OpenCV图像处理(十三)—— Canny边缘检测

    简介: 1.Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法. 2.Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是: 好的检测- ...

  6. OpenCV——边缘检测入门、Canny边缘检测

    边缘检测的一般步骤: 最优边缘检测的三个评价标准: 低错误率:表示出尽可能多的实际边缘,同时尽可能地减少噪声产生的误报: 高定位性:标识出的边缘要与图像实际边缘尽可能接近: 最小响应:图像中的边缘只能 ...

  7. OpenCV学习代码记录——canny边缘检测

    很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...

  8. [Opencv]图像的梯度与边缘检测(转)

    文章来源:https://blog.csdn.net/on2way/article/details/46851451 梯度简单来说就是求导,在图像上表现出来的就是提取图像的边缘(不管是横向的.纵向的. ...

  9. openCV实例:Canny边缘检测

    http://blog.sina.com.cn/s/blog_737adf530100z0jk.html 在第一次使用openCV程序成功对图像进行打开后,现在开始试验第二个例程试验:Canny边缘检 ...

随机推荐

  1. 如何以nobody用户执行命令?

    最近在logstash中使用nobody用户启动logstash,一想,nobody用户的shell不是/sbin/nologin吗? 不能登录执行命令呀? 于是看了一下它的启动脚本,是使用其他方式进 ...

  2. Linux下安装setup tools小工具

    1, 最小化的linux系统(centos\redhat)默认都是没有安装setup图形小工具的,你输入setup命令会提示 command not found . 如果要使用这个命令安装方法 1.安 ...

  3. js正则匹配浮点数或整数

    var pos='point(12.4 -45.423453)';var re = /([+]\d+[.]\d+|[-]\d+[.]\d+|\d+[.]\d+|[+]\d+|[-]\d+|\d+)/i ...

  4. (转)Rest介绍

    参考文献:Rest简介 REST是一种组织Web服务的架构,其只在架构方面提出了一系列约束. 关于Restful的无状态 所以在stackoverflow中,我们常常会看到有人问:我现在使用了这样一种 ...

  5. Flex布局语法与实践

    一.参考文献 阮一峰 Flex布局的语法 阮一峰 Flex布局的实践 二.Flex语法 (一)Flex是什么 Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状 ...

  6. PHP内存溢出解决方案

    一.内存溢出解决方案 在做数据统计分析时,经常会遇到大数组,可能会发生内存溢出,这里分享一下我的解决方案.还是用例子来说明这个问题,如下: 假定日志中存放的记录数为500000条,那么解决方案如下: ...

  7. $().index() 两种用法

    第一种:获得第一个 p 元素的名称和值: $(this).index() <script type="text/javascript"> $(document).rea ...

  8. CSS样式优先级

    关于CSS样式优先级 一般情况下: [1位重要标志位] > [4位特殊性标志] > 声明先后顺序 !important > [ id > class > tag ] 使用 ...

  9. 如何使Python完美升级到新版本

    这里提供一种解决的方法 (加上一句话,发现一个新问题:这种方法yum update 后,需要将/usr/bin下的python文件删除,然后执行: # ln -s /usr/local/python2 ...

  10. CURL常用命令--update20151015

    下载单个文件,默认将输出打印到标准输出(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中:-o:将文件保存为命令行中指定的文件名的 ...