C++ 为什么在访问矩阵中的像素时使用不同的数据类型会得到不同的值?
我有一个单通道灰度图像(切片)C++ 为什么在访问矩阵中的像素时使用不同的数据类型会得到不同的值?,c++,opencv,computer-vision,C++,Opencv,Computer Vision,我有一个单通道灰度图像(切片) cout用几行代码就可以得到很多东西 由于您的图像是灰度图像,因此应使用at访问它 请注意,at函数接受(行,列),它与(x,y)相反 逐行扫描更快,因为矩阵是按行存储在内存中的 要打印出uchar的值,您需要强制转换为int,或者获得ASCII编码字符 循环不应该是几行代码中的大量内容 由于您的图像是灰度图像,因此应使用at访问它 请注意,at函数接受(行,列),它与(x,y)相反 逐行扫描更快,因为矩阵是按行存储在内存中的 要打印出uchar的值,您需要强
cout用几行代码就可以得到很多东西
- 由于您的图像是灰度图像,因此应使用
at
访问它
- 请注意,
at
函数接受(行,列)
,它与(x,y)相反李>
- 逐行扫描更快,因为矩阵是按行存储在内存中的
- 要打印出
uchar
的值,您需要强制转换为int
,或者获得ASCII编码字符
- 循环不应该是几行代码中的大量内容
- 由于您的图像是灰度图像,因此应使用
at
访问它
- 请注意,
at
函数接受(行,列)
,它与(x,y)相反李>
- 逐行扫描更快,因为矩阵是按行存储在内存中的
- 要打印出
uchar
的值,您需要强制转换为int
,或者获得ASCII编码字符
- 循环不应该是
,谢谢。这更有意义。因此,对于单通道,始终使用uchar,对于三通道,始终使用Vec3b?对于单通道(灰度)图像(类型CV_8UC1
),始终使用uchar,对于三通道(彩色)图像(类型CV_8UC3
)。请注意,如果有int
、float
、double
、short
或无符号short
矩阵,则应使用适当的类型。阅读更多关于数据类型的信息,例如,谢谢。这更有意义。因此,对于单通道,始终使用uchar,对于三通道,始终使用Vec3b?对于单通道(灰度)图像(类型CV_8UC1
),始终使用uchar,对于三通道(彩色)图像(类型CV_8UC3
)。请注意,如果有int
、float
、double
、short
或无符号short
矩阵,则应使用适当的类型。阅读有关数据类型的更多信息,例如和
cout << "num" << slice.channels() << ends; //outputs 1
for(int x = 0;x<=slice.cols;x++){
for(int y = 0;y<=slice.rows;y++){
Vec3b currentPoint = slice.at<Vec3b>(x,y);
cout << currentPoint;
}
}
for(int y = 0; y < slice.rows; y++) {
for(int x = 0; x < slice.cols; x++) {
uchar currentPoint = slice.at<uchar>(y,x);
cout << int(currentPoint) << " ";
}
cout << "\n";
}