OpenCv c++ cvPutText 在与 Mat 一起使用时总是抛出"Unknown array type"

OpenCv c++ cvPutText always throws "Unknown array type" when used with Mat

本文关键字:Unknown type array 在与 cvPutText c++ Mat 一起 OpenCv      更新时间:2023-10-16

这是简化的代码:

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。