argc,argv参数
main(int argc,char** argv):
- int argc 表示命令行字串的个数
- char ** argv[]表示命令行参数的字符串
这两个形参是存在于Linux和OS上的写法,是命令行编译程序时使用的。如果遇到报错,可以【项目属性】-> 【配置属性】-> 【调试】-> 【命令参数】->中指定参数的值。
格式化输出:printf()函数
遍历矩阵时使用
发现利用cout<<"";不能打印uchar类型,打印出来会乱码,但是利用printf("%u",I.at<uchar>(i,j))可以打印出来uchar类型的变量。
printf(“Opencv版本%s”,CV_VERSION);
HighGUI界面
imwrite()函数
bool imwriter(filename, img, const vector<Int> & params =vector<int>());
参数:const vector<Int> & params =vector<int>()表示
- 对于jpeg,0-100表示图片质量,默认是95
- 对于png,0-9表示压缩基表,较高的值意味着更小的尺寸和更长的压缩时间,默认是3
- 对于PPM,PGM,或者PBM格式的图片,表示一个二进制格式标志,取值为0或者1,默认是1
定义ROI的方法
-
方法一
imageROI = image(Range(350,350+logo.rows),Range(800,800+logo.cols)); -
方法二
imageROI = image(Rect(800,350,logo.cols,logo.rows));
图像叠加
addWeighted(imgeROI, 0.5, logo, 0.3, 0. ,image_dst)
滑动条的使用
createTrackbar(conststring& trackbarname, conststring& winname, int* value,int count, TrackbarCallback onChange = 0, void* userdata = 0);
- trackbarname 滑动条名字;
- winname 窗口的名字;
- int*类型的value,一个指向整形的指针,表示滑块的位置。在创建时,滑块的初始位置就是该变量当前的值
- int 类型的count,表示滑块可以达到的最大值,滑块最小位置的值始终是0;
- TrackbarCallback类型的onChange,它有默认值0,。这是一个指向回调函数的原型必须为void XXX(int,void*);其中第一个参数是轨迹条的位置,第二个参数是用户数据(看下面第六个参数)。如果回调函数是NULL指针,则表示没有回调函数的调用。
- void*类型的userdata,也有默认值0,用来处理轨迹条事件。
sprintf函数(就是用来拼接字符串的)
可以理解为拼接字符串
int sprintf( char *buffer, const char *format, [ argument] … );
buffer:char型指针,指向将要写入的字符串的缓冲区, 必须指明该字符串大小 。
format:格式化字符串。
[argument]… .:可选参数,可以是任何类型的数据。
返回值:字符串长度( strlen)
sprintf(name, "%s%s", firstName, lastName);
getTrackbarPos()函数
int getTrackbarPos(conststring& trackbarname,conststring& winname);
获取当前的位置并且返回
- 第一个参数trackbarname,表示轨迹条的名字;
- 第二个参数winname,表示轨迹条的父窗口名字;
core组件
Mat相关
Mat是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸、存储方法、存储地址等信息)和一个指向存储所有像素值的矩阵的指针。
Mat B(A)拷贝构造函数,C=A赋值符,只复制矩阵信息头和矩阵指针,不复制矩阵;
ROI:
- Mat D(A,Rect(10,10,100,100));//使用矩形界定;
- Mat E = A(Range:all(),Range(1,3));//用行和列来界定
复制矩阵本身:
Mat F = A.clone();
Mat G; A.copyTo(G);
构造函数:
Mat M(2,2,CV_8UC3,Scalar(0,0,255));
Mat M; M.create(4,4,CV_8UC(2));
Mat::eye(4,4,CV_64F); Mat E = Mat::ones(4,4,CV_32F);
Mat C = (Mat_<double>(3,3)<<0,1,3,4,1,54,3,5,2);
Mat D = C.row(1).clone();
矩阵输出
- 默认风格:
cout<<“r”<<r<<";"<<endl<<endl;
cout<<“r”<<format(r,1)<<endl; - 逗号分隔符
cout<<“r”<<format(r,2)<<endl; - python风格
cout<<“r”<<format(r,3)<<endl; - Numpy风格
cout<<“r”<<format(r,4)<<endl; - C语言风格
cout<<“r”<<format(r,5)<<endl;