Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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])