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