下面是采用 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 <opencv><br>#endif</opencv>
#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
分享到:
相关推荐
OpenCV库提供了几种经典的边缘检测算法,如Canny边缘检测、Sobel算子、Prewitt算子、Laplacian运算以及Hough变换等。 Canny边缘检测是广泛使用的边缘检测算法,由John F. Canny在1986年提出。它通过多级滤波、非极...
在"EdgeDetection"这个项目中,开发者可能实现了上述一种或多种边缘检测算法,并提供了相应的源代码。通过学习和理解这些源代码,我们可以深入理解边缘检测的原理,以及如何在实际应用中高效地利用OpenCV库。同时,...
在Visual Studio中,我们需要设置正确的库链接和包含路径,确保OpenCV库可以正确编译和运行。这通常包括添加OpenCV库的头文件目录和库目录,以及链接所需的OpenCV库文件。 通过这个项目,你可以学习到如何在实际...
在这个项目中,我们将会使用OpenCV库(一个广泛应用于图像处理和计算机视觉的开源库)以及Matlab来处理RGB图像,并在Lab色彩空间中进行边缘检测。 Lab色彩空间是由CIE(国际照明委员会)定义的一种颜色模型,它旨在...
在提供的压缩包"Edge Detection"中,可能包含了实现这些步骤的源代码文件。通过阅读和理解这些代码,你可以学习如何在实际项目中应用边缘检测算法,并且可以对其进行修改和优化以适应不同的应用场景,比如提高速度、...
最后,我们需要对包含边缘检测算法的`edge_detection.cpp`源码进行交叉编译。使用`arm-xilinx-linux-gnueabi-g++`,指定头文件和库文件的路径,以便正确链接OpenCV库。 通过以上步骤,我们就成功地将OpenCV移植到了...
这个“canny源代码.rar”压缩包包含了实现Canny边缘检测算法的源代码,用户可以下载并运行,以理解和应用该算法。 Canny边缘检测算法主要由以下几个步骤组成: 1. **噪声去除**:首先,对输入图像进行高斯滤波,以...
源代码文件通常包括各种示例程序,这些程序覆盖了OpenCV的基础操作,如图像读取与显示、图像基本操作(如裁剪、旋转、色彩空间转换)、特征检测(如边缘检测、角点检测)、图像匹配、物体识别、视频处理等。...
对于这个项目,我们可以通过查看源代码来深入了解CNN如何应用于边缘检测,学习如何在Python环境中搭建并训练深度学习模型。这不仅有助于提升理论知识,还能提高实际动手能力,对深入理解计算机视觉和深度学习有极大...
在Delphi中,开发者需要导入OpenCV库,编写函数来调用Canny函数,处理输入图像,并返回边缘检测后的结果图像。 总的来说,Canny边缘检测算法因其鲁棒性和效率而被广泛应用,它在许多图像分析和计算机视觉任务中都是...
- **双阈值检测**:设置两个阈值,低阈值用于初步检测边缘,高阈值用于确认边缘,减少假阳性边缘。 - **边缘连接**:将孤立的边缘点连接成连续的边缘。 **2. OpenCV库与C++结合:** OpenCV库提供了`cv::Canny`...
在压缩包文件"**Canny Edge Detection C#1**"中,可能包含了完整的C#源代码,演示了如何在Visual Studio 2013环境下构建和运行Canny边缘检测的程序。通过阅读和理解这段代码,开发者可以学习到如何在实际项目中应用...
拉普拉斯边缘检测是计算机视觉和图像处理领域中一种经典的边缘检测方法,它基于拉普拉斯算子。本文将深入探讨拉普拉斯算子的概念、原理以及在MATLAB中的实现,同时结合Visual C++和MATLAB环境下的图像处理案例进行...
这个项目的源代码可能包含了一系列函数,分别对应于上述各个步骤,比如`preprocess_image()`(预处理图像)、`canny_edge_detection()`(Canny边缘检测)、`morphological_operations()`(形态学操作)、`hough_...
在“HEDC++”这个压缩包中,很可能包含了实现HED边缘检测的C++源代码、模型权重文件以及相关的测试程序。通过这些资源,开发者可以学习如何使用C++和Caffe来实现HED算法,进行边缘检测。测试程序可以帮助验证接口的...
例如,可能会有使用OpenCV库实现的Canny边沿检测函数,以及采用某种特定算法进行轮廓跟踪的代码段。OpenCV是一个强大的跨平台计算机视觉库,提供了丰富的图像处理函数,非常适合进行边沿检测和轮廓跟踪。 总的来说...
对于压缩包中的“r2-edge-detection-master”目录,我们可以期待找到项目源代码、测试数据、README文件等资源。源代码将揭示算法的具体实现细节,包括可能使用的数据结构、优化技巧以及如何与实际机器人系统交互。...
本项目"ZernikeMoment_SubPixel_Detection.zip"主要介绍了如何利用OpenCV库实现亚像素边缘检测,特别是通过7x7的Zernike矩方法来实现这一目标。下面我们将详细探讨Zernike矩和OpenCV在亚像素边缘检测中的应用。 ...
OpenCV(开源计算机视觉库)是一个强大的跨平台计算机视觉库,它包含了大量的图像处理和计算机...在这个“opencv edge”项目中,我们不仅学习了OpenCV的边缘检测,还了解了如何在古老的开发环境中集成和使用OpenCV库。
OpenCV(开源计算机视觉库)是一个强大的图像处理和计算机视觉框架,广泛应用于图像分析、机器学习和人工智能领域。本教程是基于OpenCV1.0版本和Visual C++ 6.0(VC6.0)环境的图像处理学习实例,特别适合初学者入门...