openCV Mat问题“输入参数的大小不匹配”

Posted

技术标签:

【中文标题】openCV Mat问题“输入参数的大小不匹配”【英文标题】:Problem with openCV Mat "Sizes of input arguments do not match" 【发布时间】:2019-12-13 13:34:15 【问题描述】:
Mat newMask = Mat::zeros(mask.size(), mask.type());

for (int i=0; i< 3; i++)
    Mat tray = Mat::zeros(mask.size(), mask.type());
    inRange(mask,i+1, i+1, tray);
    cv::erode(tray, tray, getStructuringElement(MORPH_RECT, cv::Size(5, 5)), cv::Point(-1, -1));
    newMask += tray;

那个方法应该行吗?

我遇到了崩溃:

输入参数的大小不匹配) 该操作既不是'array op 数组'(其中数组具有相同的 大小和相同数量的通道), 也不是“数组运算标量”,也不是“标量运算” 函数'arithm_op'中的数组'

在下一行:

newMask += tray;

【问题讨论】:

如果您删除中间线中的一条或两条,即 inRange 和/或 cv::erode,它会在那里崩溃吗? 如果在“newMask += tray;”这一行崩溃。当我评论前两个时,我遇到了另一种崩溃 【参考方案1】:

您的图像的频道号不同。这就是原因。您可以像这样简单地更改您的代码:

Mat newMask = Mat::zeros(mask.size(), mask.type());

cvtColor(newMask,newMask,CV_BGR2GRAY);
    for (int i=0; i< 3; i++)
        Mat tray = Mat::zeros(mask.size(), mask.type());
        inRange(mask,i+1, i+1, tray);
        cv::erode(tray, tray, getStructuringElement(MORPH_RECT, cv::Size(5, 5)), cv::Point(-1, -1));
        newMask += tray;
    

您也可以查看this link 提到的相同问题。

【讨论】:

【参考方案2】:

谢谢尤努斯,

现在这段代码:

+ (Vec3f)getFeats:(Mat&)mask 
    Mat newMask = Mat::zeros(mask.size(), mask.type());

    cvtColor(newMask,newMask,COLOR_BGR2GRAY);
        for (int i=0; i< 3; i++)
            Mat tray = Mat::zeros(mask.size(), mask.type());
            inRange(mask,i+1, i+1, tray);
            cv::erode(tray, tray, getStructuringElement(MORPH_RECT, cv::Size(5, 5)), cv::Point(-1, -1));
            newMask += tray;
        

    vector<vector<cv::Point> > contours;
    findContours( newMask, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE );

    vector<float> v;
    for( int i = 0; i< contours.size(); i++ )
        v.push_back(cv::contourArea(contours[i])/(mask.size[0]*mask.size[1]));
    

    sort(v.begin(), v.end(), std::greater<float>());
    return Vec3f(v[0], v[1], v[2]);

在最后一行崩溃:

线程 1:EXC_BAD_ACCESS(代码=1,地址=0x0)

【讨论】:

以上是关于openCV Mat问题“输入参数的大小不匹配”的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 错误:输入参数的大小不匹配

xCode 中的 OpenCV 错误:输入参数的大小不匹配

opencv-python addWeighted() 错误 - 输入参数的大小不匹配

OpenCV - 输入参数的大小不匹配 - addWeighted

cvcalcopticalflowbm opencv 2.4.7 中输入参数的大小不匹配

opencv cv::max 行为意外