这是简化的代码:

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。

08-17 00:26