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. easyUI文本框textbox笔记

    知识点: 1.图标位置 Icon Align属性,有left和right两个: 2.textbox的setvalue方法,getvalue方法. <div style="margin: ...

  2. host,nslookup,dig 命令安装

    host,nslookup,dig依赖bind包,所以先看一下系统有没有bind包 命令如下:rpm -qa |grep bind 如果没有或者版本太低请升级安装 命令是:yum install bi ...

  3. ListBox

    <asp:ListBox runat="server" ID="txtName" Width ="200"  Height=" ...

  4. 初学Memcached安装及使用(CentOS7)

    1.yum install memcached安装memecached 2.chkconfig memcached on设置memcached开机启动 3.service memcached star ...

  5. 9月19日上午JavaScript数组

    数组 一.定义 1.数组的文字定义 广义上说,数组是相同类型数据的集合.但是对于强类型语言和弱类型语言来说其特点是不一样的.强类型语言数组和集合有以下特点. 数组强类型语言:1.数组里面只能存放相同数 ...

  6. CSS学习笔记——CSS选择器样式总结

    <style type="text/css"> * { padding:0; margin:0; } .box h2 { //内边距左边的距离 padding-left ...

  7. Java I/O流体系

  8. docker中启动mysql报错

    [root@5416ec39653b init.d]# /etc/init.d/mysqld start /etc/init.d/mysqld: line 23: /etc/sysconfig/net ...

  9. Swift学习二

    // 定义枚举方式一 enum Season { // 每个case定义一个实例 case Spring case Summer case Fall case Winter } // 定义枚举方式二 ...

  10. Python-面向对象编程(二)

    面向对象进阶篇: 初级篇中我们介绍了面向对象基本知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 2.介绍了类中的对象.方法和属性及类中内置的方法 3.类 是一个模板 ...