繁体   English   中英

cv :: Mat对象中的空数据字段

[英]Null Data field in cv::Mat object

我是OpenCV的新手。 我遇到了很多谜题(从我天真的角度来看......)

我试图将零矩阵的区域设置为1。 本质上做以下事项:

Mat a = Mat::zeros(10, 10, CV_8UC1);
Mat b = Mat::ones(3, 3, CV_8UC1);

Range h = Range(2, 5);
Range w = Range(2, 5);

b.copyTo(a(h, w));

我检查了这个确切代码的输出,它工作正常。 当我尝试在我的实际代码中执行此操作时出现问题:

int key, top,left,bottom,right;
Mat blackImg = Mat::zeros(imgHeight, imgWidth, CV_8UC1);
Mat whiteBox = Mat::ones(patternHeight, patternWidth, CV_8UC1);
while (true) {
    blackImg = Mat::zeros(patternHeight, patternWidth, CV_8UC1);

    top = patternPosY;
    bottom = patternPosY + patternHeight;
    left = patternPosX;
    right = patternPosX + patternWidth;

    Range h = Range(top, bottom);
    Range w = Range(left, right);

    whiteBox.copyTo(blackImg(h, w));

    imshow("Pattern", blackImg);
    // key inputs
    key = waitKey(30);

    if (key == 27) {
        break;
    }
}

但是,blackImg Mat对象的数据字段为NULL并保持不变。 这反过来会导致内存错误。 我检查了顶部,底部,右侧和左侧的值,它们都在边界内。

我确信我遗漏了一些基本的东西,如果有人能指出它,那将是无限的帮助。

最明显的解释是patternHeight或patternWidth为0,因此blackImg将替换为该行的空图像:

blackImg = Mat::zeros(patternHeight, patternWidth, CV_8UC1);

如果我正确理解你在该行尝试做什么(用黑色像素重新填充blackImg?),你应该使用:

blackImg.setTo(0);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM