opencv异常提示之 (channels() == CV_MAT_CN(dtype)) in copyTo (暂未解决,提供源码)

OpenCV Error: Assertion failed (channels() == CV_MAT_CN(dtype)) in copyTo, file /home/tau/opencv/opencv-3.1.0/modules/core/src/copy.cpp, line 257
terminate called after throwing an instance of 'cv::Exception'

  what():  /home/tau/opencv/opencv-3.1.0/modules/core/src/copy.cpp:257: error: (-215) channels() == CV_MAT_CN(dtype) in function copyTo


这个错误是使用fitLine时遇到的

问题出在

void cv::fitLine( InputArray _points, OutputArray _line, int distType,
                 double param, double reps, double aeps )

最后一行

Mat(npoints2 >= 0 ? 4 : 6, 1, CV_32F, linebuf).copyTo(_line);


而弹出错误的在下面这行

if( _dst.fixedType() && dtype != type() )
    {
        CV_Assert( channels() == CV_MAT_CN(dtype) );
        convertTo( _dst, dtype );
        return;
    }


先来看看fixedType()

bool _OutputArray::fixedType() const
{
    return (flags & FIXED_TYPE) == FIXED_TYPE;
}

其中查到 FIXED_TYPE = 0x8000 << KIND_SHIFT ,  KIND_SHIFT =16,  =  运算优先级 低于 << 

故 FIXED_TYPE 左移16位 

flags 是int 变量,   目前没有找到默认初始化的值,  莫非初始化的值是 0 ?

是0的话和肯定就与FIXED_TYPE不相等了,  返回0;

对于Mat  dtype就是CV_8U,  CV_32F之类的像素值类型

                type 就是CV_8UC1,CV_8UC2,CV_8UC3  像素值类型 + 通道

但是下面有定义

int

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值