这是简化的代码:
try {
Mat pic = imread("../files/words.bmp");
CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0);
cvPutText(&pic, "text", cvPoint(1, 20), &font, cvScalar(0, 255, 0));
namedWindow("x", WINDOW_AUTOSIZE);
imshow("x", pic);
return 0;
} catch(Exception& e) {
cout << e.err;
}
与主题中一样,其效果是cvPutText总是抛出一个异常,消息为"未知数组类型"。我知道我可以用PutText代替——它非常有效,但我想独立设置字体的宽度和高度,只有旧的cvPutText才有这样的功能。有人知道Mat需要什么格式才能使用cvPutText吗?或者我需要做一些其他转换?
因为您混淆了OpenCV的C和C++风格的API。C风格的cvPutText()
只能处理IplImage *
类型的图像,而不能处理C++风格的Mat
。
您需要将其更改为
IplImage *pic = cvLoadImage("../files/words.bmp");
CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0);
cvPutText(pic, "text", cvPoint(1, 20), &font, cvScalar(0, 255, 0));
或者,您可以使用C++风格的API,即putText()
。
附言:建议:尽量不要混淆C和C++API。