与Mat一起使用时,OpenCv c ++ cvPutText始终抛出“未知数组类型”

时间:2014-04-26 14:45:49

标签: c++ opencv

这是简化的代码:

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的格式是什么?或者我需要做一些其他的转换?

1 个答案:

答案 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。