gpt4 book ai didi

c++ - 如何从 Mat 变量编辑/读取 OpenCv 中的像素值?

转载 作者:IT老高 更新时间:2023-10-28 22:33:32 26 4
gpt4 key购买 nike

我正在寻找一种从 Mat(或 Mat3b)变量中编辑/读取像素的有效方法。

我用过:-

Image.at<Vec3b>(i,j)

但似乎很慢。

我也用过这个:-

A.data[A.channels()*A.cols*i + j + 0]

但我面临的问题是当我运行这个循环时

for(i=0; j<A.rows; i++){
for(j=0; j<A.cols; j++){
A.data[A.channels()*A.cols*i + j + 0] = 0;
A.data[A.channels()*A.cols*i + j + 1] = 0;
A.data[A.channels()*A.cols*i + j + 2] = 0;
}
}

只有一部分图像变黑。

最佳答案

Here您可以看到快速元素访问的一些可能性。

但如果你想按照自己的方式做,你需要添加一个括号。否则你的索引计算不正确:

for(int i=0; i<A.rows; i++){
for(int j=0; j<A.cols; j++){
A.data[A.channels()*(A.cols*i + j) + 0] = 0;
A.data[A.channels()*(A.cols*i + j) + 1] = 0;
A.data[A.channels()*(A.cols*i + j) + 2] = 0;
}
}

但是由于填充,不能保证内存的布局是连续的。所以根据this你应该使用这样的公式:

for(int i=0; i<A.rows; i++){
for(int j=0; j<A.cols; j++){
A.data[A.step[0]*i + A.step[1]* j + 0] = 0;
A.data[A.step[0]*i + A.step[1]* j + 1] = 0;
A.data[A.step[0]*i + A.step[1]* j + 2] = 0;
}
}

关于c++ - 如何从 Mat 变量编辑/读取 OpenCv 中的像素值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9974946/

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