C++ 如何在OpenCV中通过网络摄像头获取Mat图像的像素值

C++ 如何在OpenCV中通过网络摄像头获取Mat图像的像素值,c++,opencv,C++,Opencv,嗯,我是openCV和图像处理的新手,我确实需要帮助。我需要得到垫子的每个像素值。此图像由网络摄像头(实时)捕获。 我已经尝试了一些解决某些人问题的方法,但在我的项目中不起作用。 这是我的一些代码: Mat blackWhite; Mat binary; Mat distanceTr; cvtColor(frame, blackWhite, CV_BGR2GRAY); GaussianBlur(blackWhite, blackWhite, Size(15

嗯,我是openCV和图像处理的新手,我确实需要帮助。我需要得到垫子的每个像素值。此图像由网络摄像头(实时)捕获。 我已经尝试了一些解决某些人问题的方法,但在我的项目中不起作用。 这是我的一些代码:

    Mat blackWhite;
    Mat binary;
    Mat distanceTr;
    cvtColor(frame, blackWhite, CV_BGR2GRAY);
    GaussianBlur(blackWhite, blackWhite, Size(15,15), 6.5, 6.5);
    threshold(blackWhite, binary, 80, 255, CV_THRESH_BINARY);
    Mat invBinary =  Scalar(255) - binary;
    distanceTransform(invBinary, distanceTr, CV_DIST_L2,3);
对于像素值访问,我做了如下操作:

for(int i = 0; i < distanceTr.rows; i++)
{
    for(int j = 0; j < distanceTr.cols; j++)
    {
        if(distanceTr.at<uchar>(0,0) == 0)
        {
            cout << 1;
        }
    }
}
据我所知,distanceTr是一个灰度图像,所以它是一个单通道图像。根据一些答案,我尝试了。但不起作用:( 我正在做一个测试用例,如果(0,0)像素是黑色的,它将打印1。我得到的是一个未处理的异常错误。 你能帮忙吗

多谢各位。 (很抱歉英语不好)

的输出图像的类型为
CV_32FC1
,因此每个像素的类型为
float
。要访问像素值,必须执行以下操作:

if(distanceTr.at<float>(0,0) == 0)
{
   cout<<1;
}
if(距离在(0,0)==0)
{

COUT
distanceTrandform
的输出图像类型为
CV_32FC1
,因此您可能需要执行以下操作:
如果(距离在(0,0)==0)cout@sgar91是的,非常感谢。它正在工作我从哪里获得关于什么类型的图像提供什么类型的输出的信息?就像这种情况一样,distanceTransform生成CV_32FC1。为什么在循环中反复检查同一位置(0,0)?没有任何意义。@berak它可能是
(I,j)
@berak它仍处于过程的开始阶段,因此我只想检查(0,0)像素是否为黑色。如果为黑色,则只打印1,否则不打印。只需简单检查。稍后我将其更改为(I,j)。如果我犯了一些错误,请纠正我。还有其他人访问时有问题吗?@berak…没有。什么问题?页面加载不正确。如果对您有效,nvm。
if(distanceTr.at<float>(0,0) == 0)
{
   cout<<1;
}