【发布时间】:2016-01-10 23:42:28
【问题描述】:
我在从 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,在正方形区域(较小的边缘)之外存在异常。 有谁知道访问图片 Mat 数据的任何其他方式? 示例图片(正确结果):
异常(我的问题)
【问题讨论】:
-
没有看到你所有的代码,很难知道发生了什么。但是,在您的循环中,您可以只写:
Vec3b v = image(row, col); float pixelVal = v[0] + v[1] + v[2];。还要记住 rows 是 y 坐标,而 cols 是 x。所以你可能一开始只是交换了你的索引。 -
Vec3b v 不是简单类型...我必须使用 image.data
-
你必须....是作业还是什么?
-
嗯,我想跳过上下文。我必须使用简单类型,因为代码在 Cuda 中使用。我发送到设备数组 image.data 因为我不能使用 Mat 函数。