Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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++ 为什么在访问矩阵中的像素时使用不同的数据类型会得到不同的值?_C++_Opencv_Computer Vision - Fatal编程技术网

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";
      }