gpt4 book ai didi

c++ - OpenCV Mat 到数组访问

转载 作者:太空宇宙 更新时间:2023-11-03 22:27:41 25 4
gpt4 key购买 nike

我在访问 Mat.data 中的数据时遇到问题。我对图片执行操作,我需要分别访问每个像素。我必须对简单类型(float、int 等)进行必要的操作。我访问数据的方式如下:

for (int idx = 0; idx < image.rows; idx++) {
for (int idy = 0; idy < image.cols; idy++) {
int color_tid = idx * image.cols * image.channels() + idy * image.channels();
uint8_t blue = image.data[color_tid];
uint8_t green = image.data[color_tid + 1];
uint8_t red = image.data[color_tid + 2];
float pixelVal = (int) blue + (int) green + (int) red;
(...)
}
}

此方法仅适用于正方形图像(NxN 像素),但对于 NxM 正方形区域(较小的边缘)之外存在异常。有谁知道任何其他方式来访问图片垫的数据?示例图片(正确结果):

enter image description here

异常(我的问题)

enter image description here

最佳答案

我建议关注 data layoutMat

enter image description here

所以你的循环变成:

for (int r = 0; r < img.rows; ++r)
{
for (int c = 0; c < img.cols; ++c)
{
uchar* ptr = img.data + img.step[0] * r + img.step[1] * c;
uchar blue = ptr[0];
uchar green = ptr[1];
uchar red = ptr[2];

float pixelVal = blue + green + red;
}
}

您最终可以执行更少的操作,例如:

for (int r = 0; r < img.rows; ++r)
{
uchar* pt = img.data + img.step[0] * r;
for (int c = 0; c < img.cols; ++c)
{
uchar* ptr = pt + img.step[1] * c;
uchar blue = ptr[0];
uchar green = ptr[1];
uchar red = ptr[2];

float pixelVal = blue + green + red;
}
}

关于c++ - OpenCV Mat 到数组访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34712146/

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