【发布时间】:2012-06-15 02:13:38
【问题描述】:
我正在使用 OpenCV 处理 C++ 中的图像。
我使用二维 uchar 数组编写代码,我可以在其中读取图像的像素值,并使用 .at< uchar>(i,j) 以灰度方式上传 imread。
但是我想对彩色图像做同样的事情。因为我知道要访问我现在需要.at< Vec3b>(i,j)[0]、.at< Vec3b>(i,j)[1] 和.at< Vec3b>(i,j)[2] 的像素值,所以我制作了一个类似的Vec3b 二维数组。
但我不知道如何用像素值填充这个数组。它必须是一个二维数组。
我试过了:
array[width][height].val[0]=img.at< Vec3b>(i,j)[0]
但这没有用。
在 OpenCV 文档或此处均未找到答案。
有人有想法吗?
我已经包含了我的一些代码。我需要一个数组,因为我已经让我的整个算法工作,使用一个数组,用于只有一个通道的灰度图像。
灰度代码是这样的:
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
image_data[i*width+j]=all_images[nb_image-1].at< uchar>(i,j);
}
}
我从哪里读到的:
std::vector< cv::Mat> all_images
每个图像(我有一个长序列),检索uchar数组image_data中的像素值,并处理它们。
我现在想对 RGB 图像做同样的事情,但我无法读取每个通道的数据像素并将它们放入数组中。
这次 image_data 是一个 Vec3b 数组,我正在尝试的代码如下所示:
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
image_data[0][i*width+j]=all_images[nb_image-1].at<cv::Vec3b>(i,j)[2];
image_data[1][i*width+j]=all_images[nb_image-1].at<cv::Vec3b>(i,j)[1];
image_data[2][i*width+j]=all_images[nb_image-1].at<cv::Vec3b>(i,j)[0];
}
}
但这不起作用,所以我现在不知所措我不知道如何成功地用所有三个通道的值填充image_data 数组,而不改变代码结构,因为然后使用这个数组关于我的图像处理算法。
【问题讨论】: