OpenCv c++ cvPutText 在与 Mat 一起使用时总是抛出"Unknown array type"
OpenCv c++ cvPutText always throws "Unknown array type" when used with Mat
这是简化的代码:
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。
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- 控制到达非空函数clang(-Wreturn-type)的末尾
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- 将系数存储在头文件的数组中("does not name a type"错误)
- 尝试打开 ifstream 时出现"Incomplete type"错误
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 在"结构提升::enable_if<提升::is_pod<T>,无效>"中没有名为"type"的类型
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- OpenCV CV_16F type
- 错误 C2893 无法专门化函数模板'unknown-type std::invoke(_Callable &&,_Types &&...)'
- 无法专用化函数模板'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'
- 虚幻:按照教程"Unknown type name UTextRenderComponent"编译错误
- C++ 为什么包含类标头时会"Unknown Type"?
- 升级 XCode 后出现"Parse issue: Unknown type name"错误
- SWIG Python C++输出数组给出'unknown type'错误
- OpenCv c++ cvPutText 在与 Mat 一起使用时总是抛出"Unknown array type"