OpenCV学习笔记(2)边缘检测与滑动条的创建

来源:互联网 发布:软件测试linux面试题 编辑:程序博客网 时间:2024/06/01 09:38
<span style="font-size:14px;">#include "stdafx.h"#include"opencv2/opencv.hpp"#include <stdio.h>using namespace cv;using namespace std;Mat img, gray, edge, Cedge;int edgeThresh = 1;const char * keys = { "{1| |fruits.jpg|input image name}" };static void help(){printf("\nThis sample demonstrates Canny edge detection\n""Call:\n""    /.edge [image_name -- Default is fruits.jpg]\n\n");}static void onTrackbar(int, void*){blur(gray, edge, Size(3, 3));Canny(edge, edge, edgeThresh, edgeThresh * 3, 3);Cedge = Scalar::all(0);edge.copyTo(Cedge);imshow("Edge Img", Cedge);}int main(int argc, const char** argv){help();CommandLineParser parser(argc, argv, keys);string filename = parser.get<string>("1");Cedge.create(img.size(), img.type());img = imread(filename, 1);if (img.empty()){printf("cannot read image file:%s\n", filename.c_str());return -1;}cvtColor(img, gray, CV_BGR2GRAY);namedWindow("Edge Img", 1);createTrackbar("canny", "Edge Img", &edgeThresh, 100, onTrackbar);onTrackbar(0, 0);waitKey(0);return 0;}</span>

CommandLineParser的类

好像在opencvc版本中,应该是opencv1.0以前,还没有出现CommandLineParser这个类,最近看到opencv2.3后面的版本里自带的samples,很多都用到了CommandLineParser这个类,那么这个类到底有什么作用呢,从命名大概可以猜出这是个命令行解析类。因为我们知道opencv是一个开源库,所以其很少有图形操作方面的api,基本上还是基于命令行执行的。那么这个类的出现主要是方便用户在命令行使用过程中减少工作量,可以在程序文件中直接指定命令行中的参数指令,方便了调试。

第一行就是这个类的构造函数,前2个参数是命令行传过来的,第3个就是刚刚定义的keys了,keys的结构有一定规律,比如说"{ c | camera | 0 | use camera or not}"都是用大括号和双引号引起来,然后中间的内容分成4断,用”|”分隔开,分别表示简称,文件来源,文件值和帮助语句。第二行和第三行表示打开摄像头和打开文件,文件的文件名等都在keys指针中了。



0 0
原创粉丝点击