Ich nehme ein RGB-Bild. Ich versuche, es in einen Vektor umzuwandeln (Code ist wie unten). Wenn ich den Vektor lese, bekomme ich sehr große oder sehr kleine Werte. Ich denke, das hat etwas mit dem Vektor zu tun, der von der Funktion zurückgegeben wird, aber ich kann es nicht herausfinden. Ich erhalte Werte wie: 2.36943e-38 2.36943e-38 -8.256,25 -81.920 usw.Opencv Matrix Division von Skalar produziert sehr große/kleine Zahlen
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
#include <string>
#include <vector>
using namespace cv;
using namespace std;
vector<float> mat_to_vec(Mat M){
vector<float> array_temp;
for (int i=0;i<M.cols;i++){
for(int j=0;j<M.rows;j++)
{
array_temp.push_back(M.at<float>(j,i));
}
}
return array_temp;
}
int main(int argc, char** argv)
{
// read the image
Mat src=imread(argv[1],CV_LOAD_IMAGE_COLOR);
// separate the channels
Mat bgr[3]; //destination array
split(src,bgr);//split source
// convert to individual arrays and divide by 256
Mat temp_b=bgr[0]/256.0;
Mat temp_g=bgr[1]/256.0;
Mat temp_r=bgr[2]/256.0;
vector<float> array_b=mat_to_vec(temp_b);
vector<float> array_g=mat_to_vec(temp_g);
vector<float> array_r=mat_to_vec(temp_r);
// merge the arrays
vector<float> array_rgb;
array_rgb.insert(array_rgb.end(), array_r.begin(), array_r.end());
array_rgb.insert(array_rgb.end(), array_g.begin(), array_g.end());
array_rgb.insert(array_rgb.end(), array_b.begin(), array_b.end());
for (int i=0; i<array_rgb.size();i++){
cout << array_rgb[i] << endl;
}
return 0;
}
meinst du CV_32FC3? – user27665
Es wird nicht die Anzahl der Kanäle ändern, aber ja, Sie haben Recht, CV_32FC3 wird besser aussehen. –