gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:16:40 26 4
gpt4 key购买 nike

我是 OpenCV 的新手。我遇到了一个难题(从我天真的角度来看......)

我正在尝试将零矩阵的区域设置为一。本质上执行以下操作:

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,并且保持不变。这显然会导致内存错误。我已经检查了 top、bottom、right 和 left 的值,它们都在范围内。

我确定我遗漏了一些基本的东西,如果有人能指出来,那将会非常有帮助。

最佳答案

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

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

如果我正确理解你在那条线上想做什么(用黑色像素重新填充 blackImg?),你应该改用:

blackImg.setTo(0);

关于c++ - cv::Mat 对象中的空数据字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37977270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com