【问题标题】:Problem with openCV Mat "Sizes of input arguments do not match"openCV Mat问题“输入参数的大小不匹配”
【发布时间】: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;”这一行崩溃。当我评论前两个时,我遇到了另一种崩溃

标签: c++ opencv


【解决方案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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      相关资源
      最近更新 更多