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. 爬虫2 url管理器 url_manager.py

    #coding:utf8 class UrlManager(object): def __init__(self): self.new_urls = set() self.old_urls = set ...

  2. 自然语言13_Stop words with NLTK

    https://www.pythonprogramming.net/stop-words-nltk-tutorial/?completed=/tokenizing-words-sentences-nl ...

  3. UIButton 的属性与方法

    UIButton *btn=[UIButtonbuttonWithType:UIButtonTypeCustom];//一般都是设置为该类型 btn.frame=CGRectMake(100, 80, ...

  4. VC----文件图标和窗口图标及在任务栏显示的图标

    WNDCLASSEX wndcls; wndcls.cbSize=sizeof(wndcls); wndcls.cbClsExtra=0; wndcls.cbWndExtra=0; wndcls.hb ...

  5. Cloudservie将LocalStroage中的内容通过WAD自动上传到BLOB中

    开发云服务程序,如果使用Local stroage存储我们临时生成的日志或者文件并将它们自动上传到BLOB中,可以通过WAD来实现,具体如下: 1.配置webrole,开启Local stroage功 ...

  6. 微软.NET序列化格式

    官方文档 https://msdn.microsoft.com/en-us/library/cc236844.aspx 对比 http://www.codeproject.com/Articles/3 ...

  7. yourphp的eq作用

    <eq name="> <span style="color:#090">是</span> <else /> 否 < ...

  8. lazyload.js实现图片异步载入

    所谓图片异步加载,意思是不用一次把图片全部加载完,你可以叫它延迟加载,缓冲加载都行. 看看你有没有这种需求:某篇文章图片很多,如果在载入文章时就载入所有图片,无疑会延缓载入速度,让用户等更久,所以,我 ...

  9. AuthenticationManager.SignOut() 无法注销用户的问题

    http://hadb.me/2015/03/23/authenticationmanager-signout-not-working/ 这文章不对, 我发现原因是不能有Response.Redire ...

  10. Windows Server 2008修改IE浏览器级别便于使用

    1.降低IE安全级别  Win 2008默认IE的安全级别为“高”,并且不能随意调整,在浏览网页的时候有些会有一些限制,可以打开注册表编辑器进行设置,定位到 [HKEY_LOCAL_MACHINE\S ...