openCV实例:Canny边缘检测
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
openCV实例:Canny边缘检测
在第⼀次使⽤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.
错误3.
哈哈,代码结尾多了个},删掉就好啦。
错误4.
编译都顺利通过了,现在⼀Debugging就发现
const char* imagename = "lena.jpg";
// 载⼊图⽚
image = imread(imagename, 1);
// 判断载⼊图⽚是否成功
if(image.empty())
{
printf("miss the image file: %d \n");
return -1;
}
printf后⾯的argv[1],没什么实际作⽤,删除。
这下程序就跑通了呗,实际效果如下:
其实这些错误只要我们认真读懂错误提⽰,兵来将挡,⽔来⼟掩,再加上⽹络的资源就能够很容易解决
期待明天有新进展!!。