`
helloyesyes
  • 浏览: 1272494 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

OpenCV实例:Canny边缘检测

阅读更多

1.新建项目

启动Code::Blocks,选择File->New->Project, 项目类型选择:Console Application,项目名为:MyCanny,其他按默认选择。

2. 代码

打开main.cpp文件,输入以下代码:

#include <iostream>
#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可以大大降低开发图形图像处理程序的复杂程度,可以使开发人员专心于具体功能的开发,而又能使用图形图像领域专家的算法来处理。

由于算法的通用性,目前在精度上还有一定的不足,上面的例子虽然检测出了边缘,但是在完整性和连续性上还有不足,有遗漏和缺失的现象存在,如果要用于实际的应用,可能还需要自己的二次开发。

分享到:
评论

相关推荐

    opencv之Canny边缘检测实例下载

    详细讲解了Canny算法,高斯模糊,灰度转换,计算梯度,非最大信号抑制以及相关API的使用,此工程是Demo,欢迎下载学习。

    基于MFC的OpenCV的实例canny算法实现

    在MFC中如何创建OpenCV程序,进行canny边缘检测

    边缘检测综合示例

    本示例是《OpenCV3编程入门》中7.1.6的综合示例的C# + EMGU 3.4.1版,在这个示例程序中,分别演示了canny边缘检测、sobel边缘检测、Laplacian算子,scharr滤波器的使用。

    opencv边缘检测1

    opencv边缘检测1 opencv图像处理实例

    Canny检测边缘

    用vs2010+opencv实现的一个canny检测边缘的实例,可以调节阈值来控制结果。

    opencv实例

    采用Canny算子进行边缘检测 15 角点检测 18 图像的旋转加缩放(效果很拽,用地球做就像谷歌地球似的) 21 Log-Polar极坐标变换 22 对图像进行形态学操作(图像的开闭,腐蚀和膨胀运算) 24 用不同的核进行图像的二维...

    李立宗_OPENCV 编程案例详解.zip

    5.6 改进边缘检测算子——Canny .. 198 5.6.1 Canny 算子.. 198 5.6.2 Canny 原理及实现.. 198 5.6.3 Canny 库函数实现.. 203 5.7 改进边缘检测算子——Marr-Hildreth .. 204 5.8 几何检测 207 5.8.1 霍夫变换.. 207...

    C语言实现opencv提取直线、轮廓及ROI实例详解

    canny边缘检测采用双阈值值法,高阈值用来检测图像中重要的、显著的线条、轮廓等,而低阈值用来保证不丢失细节部分,低阈值检测出来的边缘更丰富,但是很多边缘并不是我们关心的。最后采用一种查找算法,将低阈值中...

    《Visual C++数字图像处理开发入门与编程实践》源码

    13.1.1 边缘检测的基本概念 492 13.1.2 常规边缘检测 493 13.1.3 带方向的边缘检测 498 13.1.4 拉普拉斯算子 503 13.2 Hough变换 509 13.2.1 Hough变换的原理 509 13.2.2 编程实现 515 13.3 种子算法 520 13.3.1 ...

    opencv的全部基础操作,一共109个实例全部都在anaconda3,python3.7,opencv4调试通过。

    code_036 | [Canny边缘检测器](python/code_036/opencv_036.py) | ❣️ code_037 | [图像金字塔](python/code_037/opencv_037.py) | ✔️ code_038 | [拉普拉斯金字塔](python/code_038/opencv_038.py) | ✔️ code_...

    CVMFC.rar_CVMFC_DirectShow_MFC StretchDIBits_directshow mfc_mf

     使用 OpenCV 函数处理图像在 MFC 环境下显示,实现功能为图像平滑、图像缩小与Canny 边缘检测。三、用 DirectShow 编制的视频采集程序  采用 DirectShow 实现视频采集,其优点是支持高分辨率图像采集,最高...

    Opencv实现最小外接矩形和圆

    步骤:将一幅图像先转灰度,再canny边缘检测得到二值化边缘图像,再寻找轮廓,轮廓是由一系列点构成的,要想获得轮廓的最小外接矩形,首先需要得到轮廓的近似多边形,用道格拉斯-普克抽稀(DP)算法,道格拉斯-普克...

    OpenCV实现图像转换为漫画效果

    1、先canny提取图像的边缘并强化,翻转边缘为黑色,将像素值转换为0-1的值 2、将图像进行双边滤波处理,然后将像素值缩短为每10个灰度级为一个值 3、将前两步得到的结果相乘,显示结果 #include using namespace ...

Global site tag (gtag.js) - Google Analytics