【问题标题】:cv::Mat of large integerscv::Mat 大整数
【发布时间】:2026-01-30 20:20:06
【问题描述】:

我正在努力将大整数(例如 2942584)放入 cv Mat 中。唯一接受它的类型是 CV_8UC1,但它会将值从 2942584 更改为 120(显然是 8 位)。

但是在 cv Mat 中是否有原始值??

如果有帮助,这里是简单的代码:

Mat matrix(6,10,CV_8UC1);
matrix.at<char>(0,0) = 2942584;
cout << (int)matrix.at<char>(0,0);

输出:

120

【问题讨论】:

    标签: c++ opencv integer 8-bit


    【解决方案1】:

    当您将矩阵定义为CV_8UC1 时,您定义每个元素必须是 8 位。这意味着您只能存储 0 到 255 之间的值。如果您想使用一个大数字,您应该将矩阵定义为 CV_32UC1 用于unsigned integersCV_32SC1 用于signed integers。此外,您应该将值存储为 int 而不是 char 并以适当的方式读取它。

    更正确的代码是

    Mat matrix(6,10,CV_32SC1); 
    matrix.at<int>(0,0) = 2942584;
    cout << (int)matrix.at<int>(0,0);
    

    还有一点:矩阵元素的格式如下

    CV_<NUMBER_OF_BITS><SIGNED/UNSIGNED>C<NUMBER_OF_CHANNELS>
    

    【讨论】:

    • 好的,我试过 CV_32SC1 但确实 char 是问题所在。非常感谢
    • @George 如果你在内存中使用了不正确的矩阵分配类型,你以后会遇到内存泄漏问题,这将很难调试。
    • 好的,我以后一定会注意的。这些细节非常明显,不幸的是文档中没有写太多,我自己也没有弄清楚。再次感谢您的帮助!