当我尝试将2D数组转换为图像时,行和列会变形。相同的图像不能制作。
using namespace cv;
using namespace std;
int main()
{
float val;
int val1[3][3];
Mat imm = (Mat_<float>(3,3) << 12, 13, 45, 11, 191, 255, 62, 27, 0);
if (imm.empty()) //check whether the image is loaded or not
{
cout << "Error : Image cannot be loaded..!!" << endl;
//system("pause"); //wait for a key press
return -1;
}
for (int y = 0; y < imm.rows; ++y)
{
float* row_ptr = imm.ptr<float>(y);
for (int x = 0; x < imm.cols; ++x)
{
val = row_ptr[x];
val1[y][x]=val;
if(x%3==0)
cout<<"\n";
cout<<val<<"\t";
}
}
Mat out_img(3,3,CV_8U ,val1);
cout<<"\n\n\n output= "<<out_img;
cout<<"\n\n\n\n"<<"Input= "<<imm;
}
我们获得的输出是,
12 13 45
11 191 255
62 27 0
output= [ 12, 0, 0;
0, 13, 0;
0, 0, 45]
Input= [12, 13, 45;
11, 191, 255;
62, 27, 0]
我们可以看到输出和输入不一样。因此需要帮助重建相同的数据。
感谢。
答案 0 :(得分:0)
输出失真的原因是你试图将2d int(32bit)数组放入unsigned char(8 bit)mat。要更正此问题,您必须将mat类型(CV_8U)更改为CV_32S或将2d数组更改为unsigned char
答案 1 :(得分:0)
Mat im2;
imm.convertTo(CV_8U, im2);
这将为您提供与uchar相同的图像。无需使用double for循环。