2017-03-03 194 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 *圖像)