如何在OpenCV中使用网络摄像头捕获获取Mat图像的像素值

时间:2014-04-24 05:28:09

标签: c++ opencv

嗯,我是openCV和图像处理的新手,我当然需要帮助。我需要得到Mat的每个像素值。该图像由网络摄像头捕获(实时)。 我已经从一些人的问题中尝试了一些解决方案,但它没有在我的项目上工作。 这是我的一些代码:

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

对于网络摄像头节目,我使用

    imshow("Project", distanceTr);

据我所知,distanceTr是灰度图像,所以它是1通道图像。基于一些答案,我尝试了.at&lt;&gt;但它没有工作:( 我正在做一个测试用例,如果(0,0)像素是黑色的,它会打印1.我得到的是未处理的异常错误。 你能帮忙吗?

非常感谢你。 (抱歉英文不好)

1 个答案:

答案 0 :(得分:2)

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

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

opencv documentation中,给出了每个函数参数的描述,比如图像的大小和类型等。