c++ - 以 float 组形式访问图像像素

标签 c++ image-processing opencv

我想在 opencv 中以 float 组的形式访问图像像素。我已完成以下操作:

Mat input = imread("Lena.jpg",CV_LOAD_IMAGE_GRAYSCALE);
int height = input.rows;
int width = input.cols;

Mat out;
input.convertTo(input, CV_32FC1);
copyMakeBorder(input, input, 3, 3, 3, 3, 0);

out = Mat(height, width, input.type());

float *outdata = (float*)out.data;
float *indata = (float*)input.data;

for(int j = 0; j < height; j++){
    for(int i =0; i < width; i++){
        outdata[j*width + i] = indata[(j* width + i)];
    }
}


normalize(out, out,0,255,NORM_MINMAX,CV_8UC1);

imshow("output", out);
waitKey();

这应该返回“out”中的原始图像,但是,我得到了一些奇怪的图像。谁能解释一下代码有什么问题。我想我需要使用一些步长(widthStep)。谢谢。

最佳答案

    copyMakeBorder(input, input, 3, 3, 3, 3, 0);

更改输入的尺寸,它向图像添加 6 行和 6 列。这意味着当您定义 out 并尝试循环输入上的值时,您的高度和宽度变量持有错误的值。

如果将顺序更改为

copyMakeBorder(input, input, 3, 3, 3, 3, 0);

int height = input.rows;
int width = input.cols;

应该可以正常工作。

关于c++ - 以 float 组形式访问图像像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14361322/

相关文章:

python - 如何在 OpenCV 中将轮廓分割为开放弧

Python - 多个持久可修改矩形选择器

c++ - 如何使用 EncFS 和 C++ 加密文件?

c++ - 使用 C++ 打印带有一个前导零的指数符号

python - 从图像中读取文本

python - 如何锐化opencv python中的边缘

java - 尝试使用 opencv 获取圆心

c++ - 如何将成员函数作为参数传递给不需要它的函数?

c++ - 处理 const 类数据的最佳实践

opencv - opencv 和 PIL 的差异影响模型预测