Форум программистов, компьютерный форум CyberForum.ru

Что делает конструкция (Mat_<float>(1,2) << i,j) - C++

Восстановить пароль Регистрация
 
Lopster92
3 / 3 / 0
Регистрация: 25.12.2009
Сообщений: 49
08.11.2012, 03:16     Что делает конструкция (Mat_<float>(1,2) << i,j) #1
Привет, всем:-)

Имеется конструкция:
C++
1
2
3
4
5
6
for (int i = 0; i < image.rows; ++i) {
    for (int j = 0; j < image.cols; ++j)
    {
        Mat sampleMat = (Mat_<float>(1,2) << i,j);
    }
}
Объясните пожалуйста, что делает конструкция (Mat_<float>(1,2) << i,j)
У меня есть подозрение, что вместо 1 и 2 подставляется (i,j) , но это бессмысленно, если можно можно их сразу туда подставить...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2012, 03:16     Что делает конструкция (Mat_<float>(1,2) << i,j)
Посмотрите здесь:

Что за конструкция? C++
C++ Что за конструкция в языке?
C++ Что за конструкция языка
C++ Что за конструкция?
Что за static friend конструкция? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.11.2012, 03:54     Что делает конструкция (Mat_<float>(1,2) << i,j) #2
Очевидно, Mat_ это шаблон, объявленный скорее всего как
C++
1
2
3
4
5
6
7
template <typename SomeType> 
class Mat_{
public:
Mat_(int width, int heigth);
Mat& operator << (/*...*/);
/*...*/
};
Lopster92
3 / 3 / 0
Регистрация: 25.12.2009
Сообщений: 49
08.11.2012, 20:52  [ТС]     Что делает конструкция (Mat_<float>(1,2) << i,j) #3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Очевидно, Mat_ это шаблон, объявленный скорее всего как
C++
1
2
3
4
5
6
7
template <typename SomeType> 
class Mat_{
public:
Mat_(int width, int heigth);
Mat& operator << (/*...*/);
/*...*/
};
Я полазил по исходникам, но не нашел перегрузки оператора <<, там только для = есть((
Вот весть код (на OpenCV):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ml/ml.hpp>
 
using namespace cv;
 
int main()
{
    // Data for visual representation
    int width = 512, height = 512;
    Mat image = Mat::zeros(height, width, CV_8UC3);
 
    // Set up training data
    float labels[4] = {1.0, -1.0, -1.0, -1.0};
    Mat labelsMat(4, 1, CV_32FC1, labels);
 
    float trainingData[4][2] = { {501, 10}, {255, 10}, {501, 255}, {10, 501} };
    Mat trainingDataMat(4, 2, CV_32FC1, trainingData);
 
    // Set up SVM's parameters
    CvSVMParams params;
    params.svm_type    = CvSVM::C_SVC;
    params.kernel_type = CvSVM::LINEAR;
    params.term_crit   = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);
 
    // Train the SVM
    CvSVM SVM;
    SVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params);
 
    Vec3b green(0,255,0), blue (255,0,0);
    // Show the decision regions given by the SVM
    for (int i = 0; i < image.rows; ++i)
        for (int j = 0; j < image.cols; ++j)
        {
            Mat sampleMat = (Mat_<float>(1,2) << i,j);
            float response = SVM.predict(sampleMat);
 
            if (response == 1)
                image.at<Vec3b>(j, i)  = green;
            else if (response == -1)
                 image.at<Vec3b>(j, i)  = blue;
        }
 
    // Show the training data
    int thickness = -1;
    int lineType = 8;
    circle( image, Point(501,  10), 5, Scalar(  0,   0,   0), thickness, lineType);
    circle( image, Point(255,  10), 5, Scalar(255, 255, 255), thickness, lineType);
    circle( image, Point(501, 255), 5, Scalar(255, 255, 255), thickness, lineType);
    circle( image, Point( 10, 501), 5, Scalar(255, 255, 255), thickness, lineType);
 
    // Show support vectors
    thickness = 2;
    lineType  = 8;
    int c     = SVM.get_support_vector_count();
 
    for (int i = 0; i < c; ++i)
    {
        const float* v = SVM.get_support_vector(i);
        circle( image,  Point( (int) v[0], (int) v[1]),   6,  Scalar(128, 128, 128), thickness, lineType);
    }
 
    imwrite("result.png", image);        // save the image
 
    imshow("SVM Simple Example", image); // show it to the user
    waitKey(0);
 
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.11.2012, 21:08     Что делает конструкция (Mat_<float>(1,2) << i,j) #4
Цитата Сообщение от Lopster92 Посмотреть сообщение
OpenCV
Предупреждать об этом надо. Теперь я понял, что Mat_ это встроенный шаблон OpenCV. Я его очень смутно знаю, посмотри описание Mat_

Добавлено через 5 минут
Jopa.exe
Lopster92
3 / 3 / 0
Регистрация: 25.12.2009
Сообщений: 49
08.11.2012, 21:51  [ТС]     Что делает конструкция (Mat_<float>(1,2) << i,j) #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Jopa.exe
Вот прям даже в другой теме, напомнил))) АХаххах
Yandex
Объявления
08.11.2012, 21:51     Что делает конструкция (Mat_<float>(1,2) << i,j)
Ответ Создать тему
Опции темы

Текущее время: 21:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru