2017-03-03 192 views
0

我只是想了解OpenCV,并且我在x64机器上运行。错误将cv :: mat转换为cv :: arr

我在VS2015上使用OpenCV 3.2.0之前,我尝试按照步骤 从凯尔豪恩斯洛在YouTube上的步骤教程,但我得到错误。

然后我重装使用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); 
    } 


} 

请帮我在这,非常感谢。

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

千恩万谢

+0

'CvMat'接受'Mat'作为构造一个ARG这样:CvMat中'imageMat(图像);'然后通过这个地址到'cvShowImage':''cvShowImage(“window”,&imageMat);',实际上你还需要传递尺寸和dtype以便'CvMat imageMat(height,width,dtype,image);' – EdChum

+2

**不要使用过时的C api!**你可以参考[documentation](http://docs.opencv。org/master/d8/dfe/classcv_1_1VideoCapture.html#a57c0e81e83e60f36c83027dc2a188e80)举例说明如何正确执行此操作 – Miki

+0

如果原始问题已解决并且您还有其他问题,请打开一个新问题 – slawekwin

回答

0

你混合旧,过时 C api(cvNamedWindow,cvShowImage,cvWaitKey)与新的C++ API(Mat,VideoCapture)。不要这样做。完全放弃C api。所有名为cvFunctionName的名称都已过时。使用较新的api,它使用cv作为命名空间,所以像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); 
    } 
} 
+0

我尝试你对我的建议,并没有更多的错误转换cv:mat到cv:arr,但现在有问题,因为冲突机器,我使用。 我更新上面的结果 –

1

,如果你需要使用C++垫应使用imshow("window", image);。根据opencv docs

显示在指定的窗口中的图像

C++:无效imshow(常量字符串& winname,InputArray垫)

C:无效cvShowImage(为const char *名,常量CvArr *图像)