OpenCV如何存储和读取整数矩阵?

How to store and read integer matrix by OpenCV?

我想构建一个 openCV 矩阵。以下是我的代码。

int data[9]={0,1,0,0,-1,0,0,0,0};
cv::Mat m(3, 3, CV_8SC1,data);
cout<<(int)m.at<char>(0,1)<<endl;
cout<<(int)m.at<schar>(0,1)<<endl;

我的显示器没有显示任何结果。但是,如果我将代码更改为以下内容。

float data[9]={0,1,0,0,-1,0,0,0,0};
cv::Mat m(3, 3, CV_32FC1,data);
cout<<m.at<float>(0,1)<<endl;

将显示“1”。但是,如果我使用类型 "float" 而不是 "int",我需要花费冗余内存来存储数字“1”、“0”或“-1”。有谁知道如何用 openCV 保存整数?谢谢你。


搜索了更多网站后,我找到了如下解决方案。

cv::Mat C = (cv::Mat_<int>(3,3) << 0, 1, 0, 0, -1, 0, 0, 0, 0);
cout << "C = " << endl << " " << C.at<int>(0,1)<<endl;

您的问题似乎是您的输入数据数组类型。您对数组使用 int(可能是 32 位)类型,但对矩阵使用 char(8 位)类型。

请尝试:

char data[9]={0,1,0,0,-1,0,0,0,0};
cv::Mat m(3, 3, CV_8SC1,data);
cout<<(int)m.at<char>(0,1)<<endl;
cout<<(int)m.at<schar>(0,1)<<endl;

如果您想要或必须使用 int 数组,请尝试

int data[9]={0,1,0,0,-1,0,0,0,0};
cv::Mat m(3, 3, CV_32SC1,data);
cout<<(int)m.at<int>(0,1)<<endl;