0

我收到以下错误“无法将 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;
}
}
4

1 回答 1

-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) );
于 2013-11-08T13:15:03.627 回答