gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:21:39 25 4
gpt4 key购买 nike

我拍了一张 RGB 图像。我尝试将其转换为 vector (代码如下)。当我读取 vector 时,我会得到非常大或非常小的值。我认为这与函数返回的 vector 有关,但我无法弄清楚。我得到的值如下:2.36943e-382.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);

关于c++ - opencv矩阵除以标量产生非常大/小的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41377880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com