C++ 为什么在我添加+;之前RGB组件都打印为符号';0'-';0';对他们来说? void onMouse(int事件、int x、int y、int标志、void*param) { //Mat*pMat=(Mat*)参数; //材料图=材料(*pMat); Mat图像(512,512,CV_8UC3,标量(255,255,255)); Vec3b平面=图像(y,x); 开关(事件) { 案例事件_LBUTTONDOWN: cout
C++ 为什么在我添加+;之前RGB组件都打印为符号';0'-';0';对他们来说? void onMouse(int事件、int x、int y、int标志、void*param) { //Mat*pMat=(Mat*)参数; //材料图=材料(*pMat); Mat图像(512,512,CV_8UC3,标量(255,255,255)); Vec3b平面=图像(y,x); 开关(事件) { 案例事件_LBUTTONDOWN: cout,c++,opencv,C++,Opencv,Vec3b基本上是一个由3个uchar组成的数组(无符号字符)。它将其显示为一个奇怪的字符,因为作为uchar的数字是一个字符(查看ascii表)。字符“0”是数字48(48+255=303)所以303是从那里来的。最后你减去这个数字,然后得到255…在cout中显示为一个数字,正确的方法是将它转换为int 代码如下所示: void onMouse(int event, int x, int y, int flags, void* param) { // Mat *pMat = (Mat*)p
Vec3b
基本上是一个由3个uchar
组成的数组(无符号字符)。它将其显示为一个奇怪的字符,因为作为uchar
的数字是一个字符(查看ascii表)。字符“0”是数字48(48+255=303)所以303是从那里来的。最后你减去这个数字,然后得到255…在cout
中显示为一个数字,正确的方法是将它转换为int
代码如下所示:
void onMouse(int event, int x, int y, int flags, void* param)
{
// Mat *pMat = (Mat*)param;
// Mat image = Mat(*pMat);
Mat image(512, 512, CV_8UC3, Scalar(255, 255, 255));
Vec3b planes = image.at<Vec3b>(y, x);
switch (event)
{
case EVENT_LBUTTONDOWN:
cout << "(" << y << "," << x << ") = (" << planes.val[0] + '0'<< ", " << planes.val[1] + '0' << ", " << planes.val[2] + '0' << ")" << endl;
}
}
cout只需使用以下方法打印值:
cout << "(" << y << "," << x << ") = (" << static_cast<int>(planes.val[0]) << ", " << static_cast<int>(planes.val[1]) << ", " << static_cast<int>(planes.val[2])<< ")" << endl;
static_cast(planes.val[0])
没有它,它们被解释为字符发生的是由+
运算符引起的char
的整体提升,这会导致int
。您也可以执行静态(planes.val[0])
或+planes.val[0]
。如果您使用+0
而不是+'0'
,则不需要进行减法anything@milleniumbug谢谢!现在我知道原因了。
static_cast<unsigned>(planes.val[0])