这是简化的代码:
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总是引发带有消息“Unknown array type”的异常。
我知道我可以改用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。