• 边缘检测(Edge Detection)的源代码(需要OPENCV库的支持)


    2004年08月31日 14:33:00

    下面是采用 CANNY 算子进行图像边缘检测的 C/C++ 源代码,在OPENCV BETA 4.0, VC6.0 环境下编译通过。关于OPENCV库的使用方法以及相关问题,请查阅下面的相关文章:

    http://forum.assuredigit.com/display_topic_threads.asp?ForumID=11&TopicID=3471

    运行文件下载地址:

    http://www.assuredigit.com/program/edge.exe

    =========

    程序开始

    =========

    #ifdef _CH_
    #pragma package
    #endif

    #ifndef _EiC
    #include "cv.h"
    #include "highgui.h"
    #endif

    char wndname[] = "Edge";
    char tbarname[] = "Threshold";
    int edge_thresh = 1;

    IplImage *image = 0, *cedge = 0, *gray = 0, *edge = 0;

    // 定义跟踪条的 callback 函数
    void on_trackbar(int h)
    {
        cvSmooth( gray, edge, CV_BLUR, 3, 3, 0 );
        cvNot( gray, edge );

        // 对灰度图像进行边缘检测
        cvCanny(gray, edge, (float)edge_thresh, (float)edge_thresh*3, 3);
        cvZero( cedge );
        // copy edge points
        cvCopy( image, cedge, edge );
        // 显示图像
        cvShowImage(wndname, cedge);
    }

    int main( int argc, char** argv )
    {
        char* filename = argc == 2 ? argv[1] : (char*)"fruits.jpg";
       
        if( (image = cvLoadImage( filename, 1)) == 0 )
            return -1;

        // Create the output image
        cedge = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, 3);

        // 将彩色图像转换为灰度图像
        gray = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, 1);
        edge = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, 1);
        cvCvtColor(image, gray, CV_BGR2GRAY);

        // Create a window
        cvNamedWindow(wndname, 1);

        // create a toolbar
        cvCreateTrackbar(tbarname, wndname, &edge_thresh, 100, on_trackbar);

        // Show the image
        on_trackbar(0);

        // Wait for a key stroke; the same function arranges events processing
        cvWaitKey(0);
        cvReleaseImage(&image);
        cvReleaseImage(&gray);
        cvReleaseImage(&edge);
        cvDestroyWindow(wndname);

        return 0;
    }

    #ifdef _EiC
    main(1,"edge.c");
    #endif



    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=90057


  • 相关阅读:
    MySQL之事务
    Java岗 面试考点精讲(基础篇02期)
    Java岗 面试考点精讲(基础篇01期)
    Tomcat热部署
    如何连接局域网的数据库
    Mybatis逆向工程中的 mybatis-generator:generate 代码生成器的使用
    如何把转入成功的XXX.sql导入到自己的数据库里
    JSP知识总结
    Servlet
    Spring学习
  • 原文地址:https://www.cnblogs.com/feisky/p/1586570.html
Copyright © 2020-2023  润新知