convertTo不在opencv中工作

时间:2016-01-12 01:12:15

标签: c++ opencv

我正在尝试在opencv C ++中使用convertTo()。但一个错误弹出说

  

左边:convertTo必须有class / struct / union

该计划如下:

for (i = 0; i < height; i += 8)
{
    for (j = 0; j < width; j += 8)
    {
        Mat block = dctImage(Rect(j, i, 8, 8));
        vector<Mat> planes;
        split(block, planes);
        vector<Mat> outplanes(planes.size());
        for (k = 0; k < planes.size(); k++) {
            planes[k].convertTo(planes[k], CV_32FC1);
            dct(planes[k], outplanes[k]);
            outplanes[k].convertTo(outplanes[k], CV_8UC1);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我不确定.convertTo()是否可以处理相同来源和目的地的情况。您可能想尝试使用一对临时变量来绕过您的错误消息。以下是您示例中的相关部分:

    // ...
    for (k = 0; k < planes.size(); k++) {
        Mat planes_k, outplanes_k;                     // <-- Added temporaries.
        planes[k].convertTo(planes_k, CV_32FC1);
        dct(planes_k, outplanes_k);
        outplanes_k.convertTo(outplanes[k], CV_8UC1);
    }
    // ...

<强>更新

根据source code of .convertTo()我的建议并不是真的需要(感谢指出这一点,@ boaz001)。

答案 1 :(得分:1)

左:声明表明其为null或未定义 即 outplanes [k]不包含您认为应该的内容。

我做了一个快速搜索,看起来这可能是一个编译器问题,因此很难理解/解释这条线......

vector<Mat> outplanes(planes.size());

https://en.wikipedia.org/wiki/Most_vexing_parse

什么是外野?是否正确实例化?

'Most_vexing_parse'文章建议使用额外的括号

帮助编译器
vector<Mat> outplanes((planes.size()));

Kinda取决于你的代码以及outplanes方法/类实际上做了什么,但我想它并没有返回你认为它应该是什么。