我想将极坐标网格图像转换为笛卡尔表示。但是我一直收到一条奇怪的错误消息,提示:
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。
答案 0 :(得分:0)
由于@ John_Sharp1318的评论,我已经解决了该问题。我必须使用C图像容器Iplimage。工作代码:
IplImage* _recovered_cart_img;
_recovered_cart_img = cvLoadImage("savetest.png");
IplImage *_lin_polar_img = cvCreateImage(cvSize(_recovered_cart_img->height, _recovered_cart_img->width), IPL_DEPTH_8U, 3);
cv::Point2f center( (float)_lin_polar_img->width / 2.f, (float)_lin_polar_img->height / 2.f );
double maxRadius = 4.0*std::min(center.y, center.x);
cvLinearPolar(_lin_polar_img, _recovered_cart_img, center, maxRadius, cv::INTER_LINEAR+CV_WARP_INVERSE_MAP);