【问题标题】:Accessing elements of OpenCV CV_8UC1 cv::Mat访问 OpenCV CV_8UC1 cv::Mat 的元素
【发布时间】:2013-04-10 10:09:52
【问题描述】:

我有一个 CV_8UC1(8 位单通道图像)类型的 cv::Mat,我想使用 at<> 运算符访问元素,如下所示:image.at<char>(row, column)。但是,当转换为 int:(int) image.at<char>(row, column) 时,一些值会变为负数,例如,255 变为 -1。

这可能是一个愚蠢的问题,但我不知道为什么会发生这种情况,以及将条目转换为int 的更好方法是什么。

提前致谢!

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    您必须指定元素是 unsigned char,介于 0 和 255 之间,否则它们将是 char(有符号),从 -128 到 127。转换方式如下:

    (int) image.at<uchar>(row,column);
    

    【讨论】:

      【解决方案2】:

      在矩阵类型 CV_8 UC 中,1 代表无符号字符。

      所以,你必须写

      image.at<unsigned char>(row, column)
      

      【讨论】:

      • 其实U代表unsigned,但是C代表channel,也就是说变量类型是8位,unsigned,单通道。因此,例如,CV_16SC2 是 2 通道 16 位(每通道)有符号数据类型(与 char 无关,尽管那里有 C)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 2015-08-07
      • 1970-01-01
      相关资源
      最近更新 更多