Opencv学习一知识准备

**

前言

**
由于已经折腾了好久,看着别人的Opencv笔记都厌倦了。我装的是Opencv4.0.1而很多教程都不和,能符合的教程也只讲了一点皮毛,目前就学会形态学操作和直方图一点东西。
从python版学起的话,在B站上看过一个课程,越学越糊涂。果然还是需要从C++开始。
目前学过高数,线性代数学了但是忘记了,矩阵论还没学,概率论还要半年之后学,好像还需要什么凸优化-------难受的一批,脑子里满是些不理解的名词,之前学到直方图画了4天,找教程又烦了我5天-----------

在这里插入图片描述
想必嫦娥4号上用的也有视觉处理的技术,而我以后想找机会做视觉识别的车子。那么,现在就定个目标吧,入门水平就定在学会图像矩阵各种乱搞的操作、学会使用运动物体跟踪等等。

命名规则约定

首先需要了解的是命名规则约定,以前没想过,但有这个机会,就学学记记。

描述 实例
类名混合使用大小写、首字母大写 ClassName
类型定义,包括枚举和typedef,混合使用大小写,首字母大写 TypeName
枚举类型处理混合使用大小写外,总以复数形式表示 EnumeratedTypes
局部变量混合使用大小写,且首字母小写,其名字应该与底层数据类型无关,而且应该反映该变量所代表的事物 localVariable
子程序参数的格式混合使用大小写,且每个单词首字母大写,其名字应该与底层数据类型无关,而且应该反映该变量所代表的事物 RoutineParameter
对类的多个子程序可见(且只对该类可见)的成员变量名用m_前缀 m_ClassVariable
全局变量名用g_前缀 g_GlobalVariable
具名常量全部大写 CONSTANT
宏全部大写,单词间用分割符_隔开 SCREEN_WIDTH
枚举类型成员名用能反映其基础类型的、单数形式的前缀,例如Color_Red,Color_Blue Base_EnumeratedType

argc与argv参数解惑

在Opencv官方实例程序里(在opencv\sources\samples\cpp里找找),往往带有这两个形参,而且一般只在命令行编译程序时才有用。

int main(int argc,char** argv){
	const char* imageName=argc>1?argv[1]:"lena.jpg";
	......
}

第一个参数argc,用来统计程序运行时发给main函数的命令行参数个数,而第二个参数:

  • argv[0]指向程序运行的全路径名
  • argv[1]指向在DOS命令行中执行程序名后的第一个字符串
  • argv[2]指向执行程序后的第二个字符串
  • argv[argc]指向NULLL

我们写个程序验证一下:

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;

int main(int argc,char** argv) {

	cout << "argc = " << argc << endl; 
	if (argc <= 1) {
		cout << "参数不够..." << endl;
		system("pause");
	}
	Mat src = imread(argv[1]);
	if (src.empty()) {
		cout << "cannot load image...";
		system("pause");
	}
	imshow(argv[0], src);


	for (int i = 0; i < argc; ++i) {
		cout << "argv[" << i << "] = " << argv[i] << endl;
	}

	waitKey(0);
	destroyAllWindows();

}

因为没有传入什么参数,Visual Studio 2017中默认argc为1,但是运行一遍后得到.exe执行文件,选一张图片放在与.exe同目录下,把图片拖到.exe上,显示用什么什么.exe打开,然后就有结果了。
在这里插入图片描述
在这里插入图片描述

另外,其实main(int argc,char* argv[],char** env)才是UINX、Linux中的标准写法。第三个参数为字符数组,和第二个一样,但他的每一个元素是ENVVAR=value形式的字符串,ENVVAR是环境变量,value是对应的值,在Opencv中很少使用(也许用的到呢)

格式输出函数printf()简析

printf保护在opencv.hpp中
printf"格式字符串"候选字符

格式字符串 作用
%d 整数->十进制
%f 整数->浮点数
%u 十进制无符号整数
%o 整数->八进制
%c 整数->ASCII字符
%s 整数->字符串
%x 整数->小写十六进制
%X 整数->大写十六进制
%p 输出地址符
%% 输出百分比符号,不进行转换

printf特殊字符

规定字符 作用
\n 换行
\f 清屏并换页
\r 回车
\t Tab符
\xhh 用十六进制表示的ASCII码,其中每个h可以用0~f中的一个替换

比如我们查一下Opencv的版本printf("\t当前使用的版本为Opencv - ",CV_VERSION);

参考:《Opencv3编程入门》

猜你喜欢

转载自blog.csdn.net/weixin_41374099/article/details/86556368