OpenCv,获取图片信息

Posted

技术标签:

【中文标题】OpenCv,获取图片信息【英文标题】:OpenCv, get image information 【发布时间】:2016-02-08 14:16:12 【问题描述】:

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

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

我的问题是:

鉴于提供的一张(工作)图像和一张我记录的(不工作的)图像,使用 opencv 比较它们的最佳方法是什么,以找出导致我崩溃的差异可能是什么?

谢谢。

我试过了:

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

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

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

【问题讨论】:

错误是什么,代码是什么? 原始代码看起来正确,而您的代码不正确。 (CV_BayerGR2BGR 看起来像是代码完成的人工制品) 好的,谢谢。这是一次去拜耳的尝试,因为相机给了我原始图像数据。但是,使用原始代码,我在 cvtColor 调用中遇到断言错误。这是因为我传递的格式错误吗? 您可以在使用mImGray.isEmpy()调用cvtColor之前检查图像是否为空。 【参考方案1】:

你可以试试这个代码:

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

if (mImGray.channels() == 3 )

   cvtColor(mImGray, mImGray, COLOR_BGR2GRAY);

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

【讨论】:

以上是关于OpenCv,获取图片信息的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV - 从 C/C++ 中的默认网络摄像头获取图片 - GTK 问题

opencv-python通过鼠标点击图片获取该点坐标,并填充区域

opencv之从视频帧中截取图片

如何使用opencv获取已经灰度化二值化的一张黑色图片中的一个亮点的具体像素坐标

Flutter获取图片大小(网络图片和本地图片)

pyqt5+opencv如何将大量图片合成一张图