zoukankan      html  css  js  c++  java
  • OpenCV图像Canny边缘检测

    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*3, 3);
        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,1);
    
        //create window
        cvNamedWindow(pGrayWindowsTitle,CV_WINDOW_AUTOSIZE);
        cvNamedWindow(pCannyWindowsTitle,CV_WINDOW_AUTOSIZE);
    
        //creat slide bar
        int pos = 1;
        cvCreateTrackbar(pWindowsToolBarTitle, pCannyWindowsTitle, &pos, 100,onCallBack);
        onCallBack(0);
    
        cvShowImage(pGrayWindowsTitle,pGrayImage);
        cvShowImage(pCannyWindowsTitle,pCannyImage);
    
        cvWaitKey(0);
        cvDestroyWindow(pCannyWindowsTitle);
        cvDestroyWindow(pGrayWindowsTitle);
        cvReleaseImage(&pGrayImage);
        cvReleaseImage(&pCannyImage);
        return 0;
    }

     

  • 相关阅读:
    可爱的中国电信 请问我们的电脑还属于我们自己吗?
    了解客户的需求,写出的代码或许才是最优秀的............
    DELPHI DATASNAP 入门操作(3)简单的主从表的简单更新【含简单事务处理】
    用数组公式获取字符在字符串中最后出现的位置
    在ehlib的DBGridEh控件中使用过滤功能(可以不用 MemTableEh 控件 适用ehlib 5.2 ehlib 5.3)
    格式化json返回的时间
    ExtJs中使用Ajax赋值给全局变量异常解决方案
    java compiler level does not match the version of the installed java project facet (转)
    收集的资料(六)ASP.NET编程中的十大技巧
    收集的资料共享出来(五)Asp.Net 权限解决办法
  • 原文地址:https://www.cnblogs.com/mypsq/p/4983566.html
Copyright © 2011-2022 走看看