关于在console中查看opencv Mat 矩阵元素的问题

本文深入探讨了在使用 OpenCV 处理 uchar 类型矩阵时遇到的输出异常问题,解释了原因并提供了解决方法。通过转型为 int 类型,实现了正确输出矩阵元素的数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序如下:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {

    Mat temp2(5, 5, CV_8UC1, Scalar(255));

    for (int i=0; i<temp2.rows; i++) {
        for (int j=0; j<temp2.cols; j++) {
                cout << temp2.at<uchar>(i,j) << endl;
        }                                                                                                                                                                                                                                                                                
    }

    return 0;
}



编译运行的时候, 发现输出显示异常, 即未出现预期的25个255:


 问题产生的原因是矩阵的元素是uchar 的类型, 一个uchar占据1 byte, 记得吗, opencv  manual中有一句话, 就是 只有你知道矩阵元素的type的时候, 才可以使用at。  上例子中之所以未出现255的输出结果, 是因为uchar 是无符号的char, 也是integer type, 流符号 << 会打印出该元素代表的character, 所以当然就不会出现a sequence of digits,  由于255对应的ASCII 字符没有, 当然什么都不会被打印出来。 所以我们需要进行转型为int 才能正常输出数子。 

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {

    Mat temp2(5, 5, CV_8UC1, Scalar(255));

    for (int i=0; i<temp2.rows; i++) {
        for (int j=0; j<temp2.cols; j++) {
                cout << (int)temp2.at<uchar>(i,j) << endl;
        }

    }

    return 0;
}

于是输出结果如下:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值