【发布时间】:2018-11-07 17:15:14
【问题描述】:
我想将极坐标网格图像转换为笛卡尔表示。但我一直收到一条奇怪的错误消息:
OpenCV 错误:cvGetMat 中的错误标志(参数或结构字段)(无法识别或不支持的数组类型),文件 M:\libs\OpenCV - 2.4.13x86\sources\modules\core\src\array.cpp,第 2482 行
这是我尽可能简单的代码:
#include<cstdio>
#include <opencv2/opencv.hpp>
#include "opencv2/imgproc.hpp"
int main()
{
// cv::Mat src = cv::imread("savetest.png"); // _lin_polar_img
// cv::Mat src = cv::imread("280px_1.png"); // _lin_polar_img
cv::Mat src = cv::Mat(800, 800, CV_8SC3); // _lin_polar_img
cv::Mat _recovered_cart_img;
cv::Point2f center( (float)src.cols / 2.f, (float)src.rows / 2.f );
double maxRadius = 0.7*std::min(center.y, center.x);
// cvLinearPolar(const CvArr* src, CvArr* dst, CvPoint2D32f center, double maxRadius, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS )
cvLinearPolar(&src, &_recovered_cart_img, center, maxRadius, cv::INTER_LINEAR+CV_WARP_INVERSE_MAP);
system("pause");
return 0;
}
我在 Windows 10 (VisualC++ 2015) 上使用 OpenCV 2.4.13。
【问题讨论】:
-
你能升级到 OpenCV 3.x 吗?它有一个 C++ 实现,而不是使用旧数据结构的旧 C 函数。
-
我无法更改库的版本。我正在一个大项目中开发一个小组件。
-
您面临的错误来自函数 cvLinearPolar,它是您提供 c++ 结构的 C 函数。 cvArr 与命名空间 cv 中的 Mat 容器没有任何关系。尝试在文档中找到替换它的 c++ 函数(例如 cv::cartToPolar)。