cvGetMat

时间:2018-11-07 17:15:15

标签: c++ opencv

我想将极坐标网格图像转换为笛卡尔表示。但是我一直收到一条奇怪的错误消息,提示:

  

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。

1 个答案:

答案 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);