2016-12-29 62 views
0

我拿一个RGB图像。我尝试将其转换为矢量(代码如下)。当我阅读矢量时,我会得到非常大或非常小的值。我认为这与从函数返回的向量有关,但我无法弄清楚。我得到的值,如:2.36943e-38 2.36943e-38 -8256.25 -81920 等由标量opencv矩阵划分产生非常大/小数字

#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;  
} 

回答

1

你需要转换你的src图像浮动元素类型的图像,使用src.convertTo(SRC,CV_32FC1) ;

+0

你的意思是CV_32FC3? – user27665

+0

它不会改变频道数量,但是,您是对的,CV_32FC3会更好看。 –