openCV实例:Canny边缘检测

http://blog.sina.com.cn/s/blog_737adf530100z0jk.html

在第一次使用openCV程序成功对图像进行打开后,现在开始试验第二个例程试验:Canny边缘检测

这里算法原理和具体编程语句都先不管,因为作为一名新手(反正我是这么感觉的),拿些现成的程序跑出效果才是让人很有feel的。

先贴下原代码:

#include "cv.hpp"
#include "cxcore.hpp"
#include "opencv2\highgui\highgui.hpp"
 
using namespace cv;
using namespace std;
 
int edgeThresh = 1;
 
// 声明 原始图片,灰度图片,和 canny边缘图片
Mat image, cedge;
Mat gray, edge;
 
void onTrackbar(int, void*)
{
//blur 灰度图片
blur(gray, edge, Size(3,3));
 
// Canny 边缘检测
Canny(gray,edge, edgeThresh, edgeThresh*3, 3);
 
//全部设为0
cedge = Scalar::all(0);
 
//拷贝边缘的象素点
image.copyTo(cedge, edge);
 
imshow("Edge map", edge);
 
}
 
int main(int argc, char** argv)
{
 
 
// 载入图片
image = imread(argv[1], 1);
 
// 判断载入图片是否成功
if(image.empty())
{
printf("miss the image file: %d \n", argv[1]);
return -1;
}
 
// 生成灰度图片,因为只有灰度图片才能生成边缘图片
         cedge.create(image.size(), image.type());
cvtColor(image,gray, CV_BGR2GRAY);
 
//新建一个窗口
namedWindow("Edge map", 1);
 
// 生成一个进度条来控制边缘检测
createTrackbar("Canny Threshold", "Edge map", &edgeThresh, 100, onTrackbar);
 
//初始化图像
onTrackbar(0,0);
 
waitKey(0);
 
return 0;
}}

这个是openCV中文论坛上的源代码C++版本,木有一点改动。但是出现以下错误:

错误1.

1>d:\program files\microsoft visual studio 10.0\my project\opencv\test\test2\test2.cpp(72): fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?
1>
1>生成失败。
这个错误很好解决的了,因为使用预编译,却没有找到标准头文件:stdAfx.h,虽然我们真的不需要用它,但是为了方便加上该语句就好了。

错误2.

参见http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=15046&p=59244&hilit=tbb_debug.dll#p59244,按照论坛中所给的网址,下载一个tbb包,将tbb_debug.dll解压到D:\Program Files\opencv\build\common\tbb\ia32\vc10(这是我的安装目录)即可。

错误3.

哈哈,代码结尾多了个},删掉就好啦。

错误4.

编译都顺利通过了,现在一Debugging就发现

很简单,例程估计用cmd来运行main(),参数在命令行中都敲进去了。直接运行debug电脑发现缺少必要参数肯定不干。仔细看下 int argc, char** argv ,第一个参数发现没用着,可以直接删掉。后面是个指向char指针的指针,程序中是用来打开文件用的,这好办,自己给他在程序中指一个呗:

const char* imagename = "lena.jpg";
 
 // 载入图片
 image = imread(imagename, 1);
 
 // 判断载入图片是否成功
 if(image.empty())
 {
  printf("miss the image file: %d \n");
  return -1;
 }

printf后面的argv[1],没什么实际作用,删除。这下程序就跑通了呗,实际效果如下:

OK!!!!

其实这些错误只要我们认真读懂错误提示,兵来将挡,水来土掩,再加上网络的资源就能够很容易解决

期待明天有新进展!!

时间: 2024-10-17 21:11:22

openCV实例:Canny边缘检测的相关文章

OpenCV图像Canny边缘检测

Canny边缘检测 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘函数原型:     void cvCanny(       const CvArr* image,              //第一个参数表示输入图像,必须为单通道灰度图      CvArr* edges,                      //第二个参数表示输出的边缘图像,为单通道黑白图      double threshold1,    

六 OpenCV图像处理4 Canny 边缘检测

1.Canny 边缘检测原理 步骤: ·1噪声去除: 由于边缘检测很容易受到噪声影响,所以第一步是使用 5x5 的高斯滤波器 去除噪声 ·2计算图像梯度: 对平滑后的图像使用 Sobel 算子计算水平方向和竖直方向的一阶导数(图 像梯度)(Gx 和 Gy) 根据得到的这两幅梯度图(Gx 和 Gy)找到边界的梯 度和方向 梯度的方向一般总是与边界垂直.梯度方向被归为四类:垂直,水平,和 两个对角线. ·3非极大值抑制 在获得梯度的方向和大小之后,应该对整幅图像做一个扫描,去除那些非 边界上的点.对

OpenCV使用Canny边缘检测器实现图像边缘检测

纯粹阅读,请移步OpenCV使用Canny边缘检测器实现图像边缘检测 效果图 源码 KqwOpenCVFeaturesDemo Canny边缘检测器是一种被广泛使用的算法,并被认为是边缘检测最优的算法,该方法使用了比高斯差分算法更复杂的技巧,如多向灰度梯度和滞后阈值化. Canny边缘检测器算法基本步骤 平滑图像:通过使用合适的模糊半径执行高斯模糊来减少图像内的噪声. 计算图像的梯度:这里计算图像的梯度,并将梯度分类为垂直.水平和斜对角.这一步的输出用于在下一步中计算真正的边缘. 非最大值抑制:

OpenCV学习代码记录——canny边缘检测

很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tree/master/OpenCVTest. #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> // c

基于opencv下对视频的灰度变换,高斯滤波,canny边缘检测处理,同窗体显示并保存

如题:使用opencv打开摄像头或视频文件,实时显示原始视频,将视频每一帧依次做灰度转换.高斯滤波.canny边缘检测处理(原始视频和这3个中间步骤处理结果分别在一个窗口显示),最后将边缘检测结果保存为一个视频avi文件. 这里问题综合性比较大,这里进行分治. 该类问题可分为四个方面的处理: (1)打开 视频或者是摄像头,并播放视频 (2)对视频的每一帧做处理 (3)同窗体显示四个结果 (4)保存视频文件 以下分为这三个方面进行处理: (1)打开 视频或者摄像头,并播放视频 这个利用opencv

实战深度学习OpenCV(一):canny边缘检测

利用canny边缘检测,我们可以很好地得到哦一个图像的轮廓,下面是基于C++的,这是我们通过这段代码得到的结果: #include "pch.h" #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> using namespace c

Canny边缘检测算法原理及其VC实现详解(二)

转自:http://blog.csdn.net/likezhaobin/article/details/6892629 3.  Canny算法的实现流程 由于本文主要目的在于学习和实现算法,而对于图像读取.视频获取等内容不进行阐述.因此选用OpenCV算法库作为其他功能的实现途径(关于OpenCV的使用,作者将另文表述).首先展现本文将要处理的彩色图片. 图2 待处理的图像 3.1 图像读取和灰度化 编程时采用上文所描述的第二种方法来实现图像的灰度化.其中ptr数组中保存的灰度化后的图像数据.具

18.Canny边缘检测

Canny边缘检测算法以Canny的名字命名,其中Canny的目标是找到一个最优的边缘检测算法,其有三种衡量标准: 低错误率:标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报 高定位性:标识出的边缘要与图像中的图像中的实际边缘尽可能接近 最小响应:图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘 //Canny int g_nCannySize; int g_nCannyThresHoldValue; int g_nSobelValue; Mat g_srcImage,g_

[转载+原创]Emgu CV on C# (六) —— Emgu CV on Canny边缘检测

Canny边缘检测也是一种边缘检测方法,本文介绍了Canny边缘检测的函数及其使用方法,并利用emgucv方法将轮廓检测解算的结果与原文进行比较. 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘.Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法. Canny 边缘检测的数学原理和算法实现这里就不再了,有兴趣的读者可以查阅专业书籍. 一.概述(若果不想看,可以略过.转自:<C