Поскольку http-вызовы и т. п. являются асинхронными, вы получаете вместо Observable
возвращаемое синхронное значение. Вы должны подписаться на него, и в обратном вызове вы получите данные.
Один вариант заключается в том, чтобы поместить вашу логику в вызов subscribe
getSomething() {
return this._restService.addRequest('object', 'method').run()
.subscribe(
res => {
// do something here
res;
},
err => {
console.error(err);
}
);
}
. Но мне нравится делать обратный вызов , чтобы ввести логику извне (возможно, компонент, возможно, другую службу):
getSomething(callback: (data) => void) {
return this._restService.addRequest('object', 'method').run()
.subscribe(
res => {
callback(res);
},
err => {
console.error(err);
}
);
}
И в вашем компоненте или где угодно:
this._yourService.getSomething((data) => {
// do something here
console.log(data);
});
Каждая строка файла csv представляет собой строку. Если ваше изображение равно 1 каналу, каждое значение представляет собой значение оттенка серого для пикселя:
1,2,3
4,5,6
7,8,9
Полученное изображение 3x3 1 канала:
Если ваше изображение имеет 3 канала, три последовательных значения в каждой строке представляют триплет bgr . Например:
1,2,3,200,100,200
4,5,6,47,205,103
7,8,9,95,23,209
приводит к 3-канальному 3-канальному изображению:
Функция loadFromCSV
принимает строка содержимого csv и тип изображения OpenCV и возвращает изображение:
Mat loadFromCSV(const string& values, int opencv_type);
Взгляните на полный код:
#include <opencv2\opencv.hpp>
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
using namespace cv;
Mat loadFromCSV(const string& values, int opencv_type)
{
Mat m;
stringstream ss(values);
string line;
while (getline(ss, line))
{
vector<double> dvals;
stringstream ssline(line);
string val;
while (getline(ssline, val, ','))
{
dvals.push_back(stod(val));
}
Mat mline(dvals, true);
transpose(mline, mline);
m.push_back(mline);
}
int ch = CV_MAT_CN(opencv_type);
m = m.reshape(ch);
m.convertTo(m, opencv_type);
return m;
}
int main()
{
string values = "1,2,3\n4,5,6\n7,8,9";
Mat img = loadFromCSV(values, CV_8UC1);
//Mat img = loadFromCSV(values, CV_8UC3);
//string values = "1,2,3,200,100,200\n4,5,6,47,205,103\n7,8,9,95,23,209";
//Mat img = loadFromCSV(values, CV_8UC3);
cout << "Img:" << endl;
cout << img << endl;
imshow("Img", img);
waitKey();
return 0;
}