访问OpenCV CV_8UC1 cv :: Mat的元素

mo5*_*470 6 c++ opencv

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

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

提前致谢!

Jav*_*ock 20

你必须指定元素是unsigned char,介于0和255之间,否则它们将是char(签名),从-128到127.转换将是这样的:

(int) image.at<uchar>(row,column);
Run Code Online (Sandbox Code Playgroud)


Sam*_*Sam 5

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

所以,你必须写

image.at<unsigned char>(row, column)
Run Code Online (Sandbox Code Playgroud)

  • 实际上`U'代表无符号,但`C`代表_channel_,意味着变量类型是8位,无符号和单通道.因此,举例来说,`CV_16SC2`是一个2信道的16位(每个通道)签名的数据类型(其具有无关一个`char`,虽然有一个`C`那里). (6认同)