Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2192426
  • 博文数量: 866
  • 博客积分: 14125
  • 博客等级: 上将
  • 技术积分: 10638
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 16:53
个人简介

https://github.com/landuochong

文章分类

全部博文(866)

文章存档

2019年(3)

2018年(1)

2017年(10)

2015年(3)

2014年(8)

2013年(3)

2012年(70)

2011年(103)

2010年(360)

2009年(283)

2008年(22)

分类: C/C++

2011-04-27 11:41:16

1. 新建项目
    启动Code::Blocks,选择File->New->Project, 项目类型选择:Console Application,项目名为:MyCanny,其他按默认选择。
 
 
2. 代码
    打开main.cpp文件,输入以下代码:
#include
#include "opencv2/opencv.hpp"
using namespace std;
char wndname[] = "Edge";
char tbarname[] = "Threshold";
IplImage *image = 0, *cedge = 0, *gray = 0, *edge = 0;
// define a trackbar callback
void on_trackbar(int h)
{
    cvSmooth( gray, edge, CV_BLUR, 3, 3, 0, 0 );
    cvNot( gray, edge );
    // Run the edge detector on grayscale
    cvCanny(gray, edge, (float)h, (float)h*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*)"lena.jpg";
    int edge_thresh = 1;
    if( (image = cvLoadImage( filename, 1)) == 0 )
        return -1;
    // Create the output image
    cedge = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, 3);
    // Convert to grayscale
    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;
}
3. 设置
    打开Project-〉Build Options选项卡
 
选择Search directories,在Compiler里Add进之前安装的OpenCV的include目录
 
    在Linker里Add进lib目录。
   
 
    选择Linker settings,将lib目录下的所有文件添加进去。
 
 
4. 编译
    点击Build->Build编译项目。
 
5. 运行
    将lena.jpg复制到MyCanny项目根目录下(为了方便,可不做)。
    打开Project-〉Set programs‘ arguments,在Program arguments里输入图片的地址。
 
    点击Build-〉Run
    运行效果:
 
 
 
 
 
 
    总结:
         使用OpenCV,只用了几十行代码就实现了边缘检测功能,可见OpenCV的强大。使用OpenCV可以大大降低开发图形图像处理程序的复杂程度,可以使开发人员专心于具体功能的开发,而又能使用图形图像领域专家的算法来处理。
         由于算法的通用性,目前在精度上还有一定的不足,上面的例子虽然检测出了边缘,但是在完整性和连续性上还有不足,有遗漏和缺失的现象存在,如果要用于实际的应用,可能还需要自己的二次开发。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gonxi/archive/2011/04/02/6297283.aspx
阅读(2551) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册