gpt4 book ai didi

c++ - 尝试使用 opencv 在 C++ 中实现一小部分 matlab 代码

转载 作者:行者123 更新时间:2023-11-28 02:42:06 27 4
gpt4 key购买 nike

我正在尝试使用 opencv 将图像转换为 double 。我试图在 C++ 中模仿 MATLAB 中可用的 im2double 函数。所以,为此我所做的是..

 Mat IMG = imread("lena.bmp");
Size size(8,8);

Mat img,img_re,grey;
cvtColor( IMG, img, CV_BGR2GRAY );

resize(img,img_re,size);
img_re.convertTo( grey, CV_64FC3, 1.0/255.0 );
std::cout<<grey<<std::endl;

unsigned char *input = (unsigned char*)(grey.data);

grey: [0.3764705882352941, 0.5176470588235293, 0.4352941176470588, 0.8274509803921568;
0.392156862745098, 0.5254901960784314, 0.7372549019607844, 0.6431372549019607;
0.4431372549019608, 0.6431372549019607, 0.7176470588235294, 0.5607843137254902;
0.5333333333333333, 0.3254901960784314, 0.6862745098039216, 0.8431372549019608]

gray存储的数据和matlab得到的数据差不多。像素的范围为 [0,1]。但是,我的问题从这里开始。我现在想从“灰色”访问像素值并将其保存到 boost 矩阵中。所以为此我使用..

 for (unsigned i=0; i < height; ++i)
{
for (unsigned j=0; j < width; ++j )
{
image(i,j) = input[grey.step * j + i ];
}
}

image:: [4,4]((24,24,144,144),(24,24,144,144),(24,216,144,224),(24,63,144,63))

在这一步之后,矩阵中的所有值都在 [0,255] 范围内。灰度图像在[0,255]之间,但为什么在第一种情况下它得到的值在[0,1]之间。

最佳答案

请远离访问 Mat 的原始“数据”指针,并使用:

grey.at<double>(i,j);

相反。

此外,如果 im_re 是一个 1 channel 的灰度图像,您的 typeflag 是错误的,应该是:

img_re.convertTo( grey, CV_64F, 1.0/255.0 );

关于c++ - 尝试使用 opencv 在 C++ 中实现一小部分 matlab 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25601138/

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