【问题标题】:Multi-Channel Back Projection Assertion (j < nimages)多通道反投影断言(j < nimages)
【发布时间】:2013-05-30 16:06:57
【问题描述】:

尝试对三通道图像进行直方图反投影会导致以下错误:

OpenCV 错误:histPrepareImages 中的断言失败 (j

失败的代码:

cv::Mat _refImage; //contains reference image of type CV_8UC3
cv::Mat output;    //contains image data of type CV_8UC3
int histSize[] = {16, 16, 16};
int channels[] = {0, 1, 2};
const float hRange[] = {0.f, 256.f};
const float* ranges[] = {hRange, hRange, hRange};
int nChannels = 3;

cv::Mat hist;
cv::calcHist(&_refImage, 1, channels, cv::noArray(), hist, nChannels, histSize, ranges);

cv::calcBackProject(&output, 1, channels, hist, output, ranges);    //This line causes assertion failure

在单通道图像上运行几乎相同的代码。根据文档,还支持多通道图像。为什么这段代码不起作用?

【问题讨论】:

    标签: c++ opencv histogram


    【解决方案1】:

    简短的回答是cv::calcBackProject()不支持就地操作,虽然文档中没有提到这一点。

    说明

    挖掘 OpenCV 源代码得到以下 sn-p:

    void calcBackProject( const Mat* images, int nimages, const int* channels,
                             InputArray _hist, OutputArray _backProject,
                             const float** ranges, double scale, bool uniform )
    {
        //Some code...
    
        _backProject.create( images[0].size(), images[0].depth() );
        Mat backProject = _backProject.getMat();
        assert(backProject.type() == CV_8UC1);
        histPrepareImages( images, nimages, channels, backProject, dims, hist.size, ranges,
                          uniform, ptrs, deltas, imsize, uniranges );
        //More code...
    }
    

    导致问题的行是:

    _backProject.create( images[0].size(), images[0].depth() );
    

    如果源和目标相同,则重新分配输入图像数据。 images[0].depth() 的计算结果为 CV_8U,它在数值上等同于类型说明符 CV_8UC1。因此,数据被创建为单通道图像。

    这是一个问题,因为histPrepareImages 仍然期望输入图像有 3 个通道,并且断言被抛出。

    解决方案

    幸运的是,解决方法很简单。输出参数必须与输入不同,如下所示:

    cv::Mat result;
    cv::calcBackProject(&output, 1, channels, hist, result, ranges);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-23
      • 2023-01-25
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      相关资源
      最近更新 更多