reshape有两个参数:
其中,参数:cn为新的通道数,如果cn = 0,表示通道数不会改变。
参数rows为新的行数,如果rows = 0,表示行数不会改变。
注意:新的行*列必须与原来的行*列相等。就是说,如果原来是5行3列,新的行和列可以是1行15列,3行5列,5行3列,15行1列。仅此几种,否则会报错。
sprintf(s,"%s%d%c","test",1,'2'); //第一个参数就是指向要写入的那个字符串的指针,剩下的就和printf()一样了
1#include "opencv2/opencv.hpp"
2
3 using namespace cv;
4 #include <iostream>
5
6 int main()
7 {
8 FileStorage fs("SVM.xml", FileStorage::WRITE);;
9 if (!fs.isOpened())
10 {
11 std::cerr << "failed to open " << std::endl;
12 }
13
14 int num = 1;
15 char path[90];
16 Mat combineMat;
17 Mat img_input, p;
18
19 while (num <4) //1-75张正图片
20 {
21 sprintf(path, "C:\\Users\\Administrator\\Desktop\\a\\%d.jpg", num);
22 img_input = imread(path, -1);
23 p = img_input.reshape(1, 1);
24 p.convertTo(p, CV_32FC1);
25 combineMat.push_back(p);
26 num++;
27 }
28
29 num = 1;
30 while (num <3) //1-120张负图片
31 {
32 sprintf(path, "C:\\Users\\Administrator\\Desktop\\b\\%d.jpg", num);
33 img_input = imread(path, -1);
34 p = img_input.reshape(1, 1);
35 p.convertTo(p, CV_32FC1);
36 combineMat.push_back(p);
37 num++;
38 }
39 fs << "TrainingData" << combineMat;
40
41 Mat label(195, 1, CV_32FC1);
42 for (int i = 0; i<label.rows; ++i)
43 {
44 if (i < 75)
45 label.at<float>(i, 0) = 1.0;
46 else
47 label.at<float>(i, 0) = -1.0;
48 }
49 fs << "classes" << label;
50 fs.release();
51
52
53 return 0;
54 }