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

标签 c++ 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;

关于c++ - OpenCV如何存储和读取整数矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28027087/

相关文章:

C++ 排序不适用于比较函数

c++ - 带有 Boost::Beast 的 SSL 隧道

Python OpenCv 段错误

opencv - 我可以使用 haar 级联来检测人脸以外的东西吗?

opencv - 定向梯度直方图

objective-c - 图像上的人脸对齐算法

C++ getline(string) 与多线程有关的段错误

c++ - 使用 C++ 处理 firefox 错误消息 “Cannot load XPCOM”

c++ - 从资源加载 png 文件(无需 MFC、ATL)

python-3.x - OpenCV - 薄板样条