OpenCv,获取图像信息

时间:2016-02-08 14:16:12

标签: c++ opencv

我正在玩一个开源的openCv应用程序。使用提供的图像集,它工作得很好,但是当我尝试传递一个实时摄像机流,甚至从该摄像机流记录的帧时,它会崩溃。我假设这与cv :: Mat类型,不同的图像通道或我没有做的某些转换有关。

提供的数据集是灰度,8位,我的图像也是如此。 该应用程序需要灰度(CV_8U)。

我的问题是:

鉴于其中一个(工作)提供的图像,以及我记录的(不工作)图像之一,使用opencv比较它们的最佳方法是什么,以找出导致我崩溃的差异?< / p>

谢谢。

我试过了:

注释掉这段代码(这给出了断言错误)

  if(mImGray.channels()==3)
    {

            cvtColor(mImGray,mImGray,CV_BGR2GRAY);
            cvtColor(imGrayRight,imGrayRight,CV_BGR2GRAY);

    }
    else if(mImGray.channels()==4)
    {

            cvtColor(mImGray,mImGray,CV_BGRA2GRAY);
            cvtColor(imGrayRight,imGrayRight,CV_BGRA2GRAY);

    }

将其替换为:

    cv::Mat TempL;
    mImGray.convertTo(TempL, CV_8U);
    cvtColor(TempL, mImGray, CV_BayerGR2BGR);
    cvtColor(mImGray, mImGray, CV_BGR2GRAY);

程序崩溃没有错误......

1 个答案:

答案 0 :(得分:2)

您可以尝试以下代码:

if ( mImGray.depth() != CV_8U )
    mImGray.convertTo(mImGray, CV_8U);

if (mImGray.channels() == 3 )
{
   cvtColor(mImGray, mImGray, COLOR_BGR2GRAY);
}

或者您可以使用create function定义一个新的Mat并使用它。