错误C2664:'cvSaveImage':无法将参数2从'cv :: Mat'转换为'const CvArr *'

时间:2013-11-08 13:02:16

标签: c++ opencv

我收到以下错误“无法将cv :: Mat转换为constCvArr”。这是代码。

在这种情况下,任何人都可以帮忙吗? 错误的原因是什么?我怎么能纠正它。

#include "stdafx.h"
#include "opencv2\calib3d\calib3d.hpp"
#include <opencv2\core\core.hpp>
#include "opencv2\imgproc\imgproc.hpp"
#include "opencv2\highgui\highgui.hpp"
#include <stdio.h>

using namespace cv;
Mat src_gray;
int _tmain(int argc, _TCHAR* argv[])
{
char *str1=(char *)malloc(500);
int nums=20;
for(int iter=0;iter<nums;iter++)
{


sprintf(str1,"training1//image%d.png",iter);

Mat img=imread(str1);

cvtColor(img,src_gray,CV_BGR2GRAY);

cv::Mat output = cv::Mat::zeros(img.rows,img.cols,img.type());

threshold(src_gray,output,128,255,THRESH_OTSU | THRESH_BINARY_INV);

char *out=(char *)malloc(500);

sprintf(out,"out%d.png",iter);

cvSaveImage(output,out);

namedWindow("threshold",1);

imshow("threshold",output);

waitKey(0);

return 0;
}
}

1 个答案:

答案 0 :(得分:-1)

你将旧的,已弃用的c-api调用(坏)与较新的c ++ api(好)混合在一起。

而不是:

 cvSaveImage(output,out);

使用:

 imwrite(output,out);

另外,无论你是malloc(),你都必须自由;)(那里有2个memleaks),再次避免整个问题:

 Mat img=imread( cv::format("training1/image%d.png",iter) ); // note: *single* slash in path, or *double backslash
 // ...

imwrite( cv::format("out%d.png",iter) );