gpt4 book ai didi

c++ - 使用opencv将RGB图像转换为一维数组

转载 作者:行者123 更新时间:2023-12-02 10:12:45 29 4
gpt4 key购买 nike

我正在尝试读取 RGB 图像并将其转换为一维数组。打印值时,我知道我为转换编写的逻辑不正确。有人可以帮我吗?另外,当我尝试定义 image_array 时,它给了我一个错误。

Expression must have constant value.


我已经在下面发布了代码。
//reading the images
Mat img_rev = imread("C:/Users/20181217/Desktop/images/imgs/output_rev.png");
cvtColor(img_rev, img_rev, COLOR_BGR2RGB);
//get the image height,width and number of channles to convert into an array
int const img_height = img_rev.rows;
int const img_width = img_rev.cols;
int const img_channels = img_rev.channels();
//printing out the dimenesions
cout << img_height << ", " << img_width << ", " << img_channels; //256,512,3
//starting the conversion to array
uchar image_array[256 * 512 * 3];
//uchar image_array[img_rev.rows * img_rev.cols * img_rev.channels()]; error:expression must have a constant value
//uchar image_array[img_height * img_width * img_channels]; error:expression must have a constant value

for (int i = 0; i < img_rev.rows; i++)
{
for (int j = 0; j < img_rev.cols; j++)
{
if(i==200 && j==200)
cout << endl << "value at (200,200) of green in MAT is :" << (int)img_rev.at<Vec3b>(i, j)[1] << endl; //printing the value at (200,200) of green channel
}
}

//conversion from image to 1d array
for (int i = 0; i < img_rev.rows; i++)
{
for (int j = 0; j < img_rev.cols; j++)
{
image_array[(i*img_rev.rows) + (j * 3)] = img_rev.at<Vec3b>(i, j)[0]; //R
image_array[(i*img_rev.rows) + (j * 3) + 1] = img_rev.at<Vec3b>(i, j)[1]; //G
image_array[(i*img_rev.rows) + (j * 3) + 2] = img_rev.at<Vec3b>(i, j)[2]; //B
}
}
cout << endl << "value at (200,200) of green in array is :" << (int)image_array[(200*img_rev.cols) + 200 +1];
cout << endl << "done";
waitKey(100000);
如果有人可以为我提供一些帮助,我将不胜感激。
提前致谢。

最佳答案

如果数组没有固定大小,就像在你的例子中一样,你应该使用动态分配的数组。申报uchar* image_array = new uchar[img_rev.total() * img_rev.channels()]可以是一个解决方案,但您需要delete当它不再使用时,它会手动释放内存。
为了不处理跟踪删除,我建议使用std::vector .

std::vector<uchar> image_array(img_rev.total() * img_rev.channels());
一旦数组被动态分配,您就可以使用您的方法。

converting cv::Mat to std::vector 有一个更简单的方法.在你的情况下,因为 img_revimread 创建,我们确定数据是连续的,所以我们可以做以下事情:
std::vector<uchar> image_array = img_rev.data;

关于c++ - 使用opencv将RGB图像转换为一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62960540/

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