C++ OpenCV-从图像中获取灰度值

C++ OpenCV-从图像中获取灰度值,c++,c,image-processing,opencv,computer-vision,C++,C,Image Processing,Opencv,Computer Vision,大家好,现在我正在尝试获取图像中每个像素的灰度值 我所说的灰度值是指图像中的白色或黑色级别,比如说0表示白色,1表示黑色。有关此图像的示例,请参见 我想要的值是 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 这可能吗?如果是,如何在C中使用OpenCV?或者,如果OpenCV不可能做到这一点,是否还有其他库可以做到这一点 你的要求当然

大家好,现在我正在尝试获取图像中每个像素的灰度值 我所说的灰度值是指图像中的白色或黑色级别,比如说0表示白色,1表示黑色。有关此图像的示例,请参见

我想要的值是

 0 0 0 0 0 0
 0 1 1 1 0 0
 0 0 1 1 0 0
 0 0 1 1 0 0
 0 0 1 1 0 0
 0 0 1 1 0 0
 0 0 1 1 0 0
 0 0 0 0 0 0

这可能吗?如果是,如何在C中使用OpenCV?或者,如果OpenCV不可能做到这一点,是否还有其他库可以做到这一点

你的要求当然是可能的,但如何做到这一点取决于很多事情。如果你使用C++,那么我们通常希望你使用C++接口,这意味着你有一个CV::Mat对象并用如下方式加载图像:使用命名空间CV

#include <opencv2/core/core.hpp>
Mat mat_gray = imread(path, CV_LOAD_IMAGE_GRAYSCALE);
现在,如果只想逐个访问像素值,可以使用_Tp&mat.atint x,int y;。即:

for(int x=0; x<mat_gray.rows; ++x)
  for(int y=0; y<mat_gray.cols; ++y)
    mat_gray.at<uchar>(x,y); // if mat.type == CV_8U
可以,如果mat.type不是CV_8U,则应使用它代替uchar


至于纯C接口,您可以检查。但是如果你使用C++,你就应该使用C++接口。

只使用循环,然后使用CVGET Real2D C API。这是一个长期的问题吗?或者你使用C++,真的,就像标签所示?@ MiZuiKAI我已经尝试过GET2D,但是我还没有尝试Gale2D,请等一下,我会尝试,谢谢。you@BarnabasSzabolcs我更喜欢C语言,但是如果你有其他语言的解决方法,我可以试着去理解它,并尝试用C或C++来使用它。是的,现在我使用C++。谢谢你们CVGET2D和CVGETReal2D都会给出同样的结果。我明天会尝试这个,并把结果报告给你们!谢谢你的回答,如果答案有效,我一定会接受:DCool,这里有一些额外的帮助:
for(int x=0; x<mat_gray.rows; ++x)
  for(int y=0; y<mat_gray.cols; ++y)
    mat_gray.at<uchar>(x,y); // if mat.type == CV_8U