这是简化的代码:
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始终使用消息&#34;未知数组类型&#34;抛出异常。 我知道我可以使用PutText - 它工作得很好,但我想独立设置字体的宽度和高度,只有旧的cvPutText具有这样的功能。 有谁知道Mat需要使用cvPutText的格式是什么?或者我需要做一些其他的转换?
答案 0 :(得分:2)
因为您正在混合使用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()
。
P.S。:建议:尽量不要混淆C和C ++ API。