• OpenCV Error: Assertion failed (src.size == dst.size && src.channels() == dst.channels()) in cvConvertScale


    发现问题:在做kinect采集的深度图去噪的时候遇到了cvConvertScale格式转换的问题。

    OpenCV Error: Assertion failed (src.size == dst.size && src.channels() == dst.channels()) in cvConvertScale, file /home/lzp/opencv-2.4.9/modules/core/src/convert.cpp, line 1372
    terminate called after throwing an instance of 'cv::Exception'
      what():  /home/lzp/opencv-2.4.9/modules/core/src/convert.cpp:1372: error: (-215) src.size == dst.size && src.channels() == dst.channels() in function cvConvertScale
    
    *** 崩溃,返回值:0 ***

    使用的KDevelop IDE单步调试,很快找到了出错语句。

    cvConvertScale(frameSet[0], image8u, 255.0 / 4096.0, 0); 

     标记一下ConvertScale的用法
    -->使用线性变换转换数组

    void cvConvertScale( const CvArr* src, CvArr* dst, double scale=1, double shift=0 );
    
    src 输入数组.
    dst 输出数组
    scale 比例因子.
    shift 该加数被加到输入数组元素按比例缩放后得到的元素上.

    总结出现该错误的原因有:

    1.check这两个图或者矩阵是不是初始化了
    2.如果初始化了,初始化的大小是不是一样,即两者有没有相同的长宽
    3.两者的depth深度是不是一样,即是不是一个是三通道的,一个是单通道的。
    或者一个是单通道32位浮点类型,一个是单通道8位整形类型

    排查代码和图像数据源,找到了我的问题所在。

    cout << "width" << temp->width << "height" << temp->height
    << "channel" << temp->nChannels
    <<"depth" << temp->depth << endl;
    运行结果:
    width:640,
    height:480,
    channel:3,
    depth:8

      深度图像因为未知原因,变成了3通道的图像!

    参考资料:

    http://blog.csdn.net/skyndsc/article/details/53870561

  • 相关阅读:
    可图性判定HavelHakimi定理
    并查集入门
    js数组和函数应用
    DOM用法及应用
    javascript基础知识
    表单
    PHP变量
    30天自制操作系统开发笔记——IDT中断描述符表
    《30天自制操作系统》学习笔记——汇编程序磁盘BIOS调用
    汇编指令: LGDT、LIDT、LLDT、LMSW、LOADALL、LOADALL286、LOCK、LODSB、LODSW、LODSD
  • 原文地址:https://www.cnblogs.com/dtyy/p/7650926.html
Copyright © 2020-2023  润新知