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;
    }

     

  • 相关阅读:
    muduo网络库TcpConnection对象生存期管理
    马:ma一个与代码无关的隐形眼镜的度数换算
    分享ORACLE数据库密码口令过期被锁后的解锁方法
    关于SVN状态图标不显示的解决办法(史上最全)
    Windows 新增远程桌面会话连接数(可多人同时远程桌面,互不影响)
    js移除字符串的中文/空格
    ORA-00059: 超出 DB_FILES 的最大值
    ORA-02292违反完整约束和ORA-02297无法禁用约束条件 cascade禁用主键
    SVN—org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir
    js金额格式化
  • 原文地址:https://www.cnblogs.com/mypsq/p/4983566.html
Copyright © 2011-2022 走看看