【问题标题】:error convert cv::mat to cv::arr将 cv::mat 转换为 cv::arr 时出错
【发布时间】:2017-07-23 06:34:35
【问题描述】:

我只是想了解 OpenCV,我在 x64 机器上运行。

我之前使用的是 OpenCV 3.2.0 和 VS2015,我尝试执行以下步骤 youtube 上 Kyle Hounslow 的分步教程,但出现错误。

然后我使用 VS2013 重新安装,但仍然出现如下错误:

Error 1   error C2664: 'void cvShowImage(const char *,const CvArr *)' : cannot convert argument 2 from 'cv::Mat' to 'const CvArr *'
Error   2 IntelliSense: no suitable conversion function from "cv::Mat" to "const CvArr *" exists

我已经在下面的链接中看到了,但仍然不适合我

OpenCV can't compile

我也检查了下面的链接,但我很困惑

how to convert from cv::Mat to CvArr?

我的代码如下:

#include<iostream>
#include<opencv\cv.h>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\videoio.hpp>
#include<opencv2\core.hpp>
#include<opencv2\imgproc\imgproc.hpp>


using namespace cv;

int main()
{

  Mat image;

  VideoCapture cap;
  cap.open(0);

  cvNamedWindow("window", 1);

  while (true)
  {
      cap >> image;

      cvShowImage("window", image);

      cvWaitKey(33);
  }


}

请帮助我,非常感谢。

对不起,我删除了更新,因为原来的问题已经解决了

非常感谢

【问题讨论】:

  • CvMat 在构造函数中接受Mat 作为arg 所以:CVMat imageMat(image); 然后将这个地址传递给cvShowImagecvShowImage("window", &amp;imageMat);,实际上你还需要传递尺寸和 dtype 所以CvMat imageMat(height, width, dtype, image);
  • 不要使用过时的 C api! 您可以参考documentation 的示例,了解如何正确执行此操作
  • 如果原来的问题解决了,还有其他问题,请开新问题
  • 当然,对不起
  • @RizkySatya 并将解决您问题的答案标记为答案

标签: c++ opencv visual-c++


【解决方案1】:

您正在混合旧的、过时的 C api(cvNamedWindowcvShowImagecvWaitKey)和新的C++ api(MatVideoCapture)。不要那样做。完全放弃 C api。命名为 cvFunctionName 的所有内容都已过时。使用使用 cv 作为命名空间的较新 api,因此您应该调用 cv::functionName 之类的名称。

在您的情况下是cv::namedWindowcv::imshowcv::waitKey

using namespace cv;

int main()
{
    Mat image;

    VideoCapture cap;
    cap.open(0);

    namedWindow("window", 1);
    while (true)
    {
        cap >> image;
        imshow("window", image);
        waitKey(33);
    }
}

【讨论】:

  • 我尝试了您对我的建议,将 cv:mat 转换为 cv:arr 没有更多错误,但现在出现了问题,因为我使用的机器冲突。我更新上面的结果
【解决方案2】:

如果你需要使用 c++ Mat,你应该使用imshow("window", image);

根据opencv docs

在指定窗口中显示图像。

C++: void imshow(const string& winname, InputArray mat)

C: void cvShowImage(const char* name, const CvArr* image)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-02
    • 2012-12-29
    • 2014-05-07
    • 2011-06-07
    • 2016-04-13
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多