1

所以我必须对图像的一部分进行一些操作。该操作不相关(我根本不更改此代码),但我创建指针的方式会改变我得到的结果。我不明白为什么会这样。

为什么这段代码会得到我想要的结果:

for(int row = 0; row < 70; ++row) {
    for(int col = 48; col < 208; ++col) {
        uchar* p = c.ptr(row+col);
        *p = (1-circuloBinario.at<unsigned char>(row,col-48))*(*p) + circuloBinario.at<unsigned char>(row,col-48)*limite;
    }
}

而这个没有?

for(int row = 0; row < 70; ++row) {
    uchar* p = c.ptr(row+48);
    for(int col = 48; col < 208; ++col) {
        *p = (1-circuloBinario.at<unsigned char>(row,col-48))*(*p) + circuloBinario.at<unsigned char>(row,col-48)*limite;
         p++;
    }
}

顺便说一句,我没有得到第二个代码的任何错误,问题是我得到的结果不是我所期望的(它从大于 0 的行开始修改图像,并从第 0 列而不是 48 列开始)。

谢谢。

4

2 回答 2

0

如 M456 所述,您使用 Mat::pt 的方式显然不正确。

如果要修改矩阵的某些元素的值,为什么不使用下面的语法呢?

c.at<element_type>(row, col) = new_value;
于 2013-05-07T06:48:44.247 回答
0

Mat::ptr返回指向指定矩阵的指针。

请参阅此处的文档:http: //docs.opencv.org/modules/core/doc/basic_structures.html#mat-ptr

所以既没c.ptr(row+col)有意义也没有c.ptr(row+48)意义,因为您应该只将行索引传递给ptr函数。

于 2013-05-07T05:17:28.717 回答