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

时间:2016-06-22 20:04:42

标签: c++ opencv mat

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

我正在尝试将零矩阵的区域设置为1。实质上做以下事情:

//$dbConnection works.

$extensionAdd_query_domain_extension = mysqli_query($dbConnection, "
    SELECT * 
    FROM domain 
    WHERE extensions='$extensionAdd_extension' 
    LIMIT 1");
$extensionAdd_query_domain_row = mysqli_fetch_array($extensionAdd_query_domain_extension, MYSQLI_NUM);
$extensionAdd_query_domain_id = sanitizeInt($extensionAdd_query_domain_row[0],$dbConnection);
$extensionAdd_query_domain_votes = sanitizeInt($extensionAdd_query_domain_row[2],$dbConnection);

//If domain id found in Db update votes otherwise add to list
if($extensionAdd_query_domain_id!='' && $extensionAdd_query_domain_votes!='')
    {
        echo 'Found in DB. Update Votes.'.$extensionAdd_extension;
    }
else
    {
        echo 'Not Found in DB. Enter in DB'.$extensionAdd_extension;
    }

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

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));

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

blackImg.setTo(0);