简体   繁体   English

opencv矩阵除以标量会产生非常大/小的数字

[英]opencv matrix division by scalar produces very large/small numbers

I take a RGB image. 我拍摄了RGB图像。 I try to convert it to a vector(code is as below). 我尝试将其转换为向量(代码如下)。 When I read the vector I get very large or very small values. 当我读取向量时,我会得到非常大或非常小的值。 I think this is something to do with the vector returned from the function but I cant figure it out. 我认为这与从函数返回的向量有关,但我无法弄清楚。 I get values like: 2.36943e-38 2.36943e-38 -8256.25 -81920 etc. 我得到的值是:2.36943e-38 2.36943e-38 -8256.25 -81920等。

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

您需要将src图像转换为float元素类型的图像,请使用src.convertTo(src,CV_32FC1);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM