所以我必须对图像的一部分进行一些操作。该操作无关紧要(我根本不更改此代码),但我创建指针的方式会改变我得到的结果。我不明白为什么会这样。
为什么这段代码会得到我想要的结果:
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列开始而不是从第0列开始)。
感谢。
答案 0 :(得分:0)
Mat::ptr
返回指向指定矩阵行的指针。
请参阅此处的文档:http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-ptr
因此,c.ptr(row+col)
和c.ptr(row+48)
都没有意义,因为您只应将行索引传递给ptr
函数。
答案 1 :(得分:0)
你使用Mat :: pt的方式显然不正确,如M456所述。
如果要修改矩阵中某些元素的值,为什么不使用以下语法?
c.at<element_type>(row, col) = new_value;