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

<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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值