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;
我想构建一个 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;