gpt4 book ai didi

c++ - OpenCV:将图像转换为 C++ 数组

转载 作者:行者123 更新时间:2023-11-28 04:50:05 25 4
gpt4 key购买 nike

我想在 opencv 中读取 3 channel RGB 图像并将其转换为线性 C++ float 组。听起来很简单,但我仍在挣扎。我用这段代码试过了,但出于某种原因,它给了我一个segmentation fault

  cv::Mat rgb_image;
cv::imread(filename.c_str(), cv::IMREAD_COLOR).convertTo(rgb_image, CV_32FC3, (1./255.));

float *rgb_data = new float(rgb_image.rows * rgb_image.cols * rgb_image.channels());
int counter = 0;
for (int z = 0; z < rgb_image.channels(); z++)
for (int i = 0; i < rgb_image.rows; i++)
for (int j = 0; j < rgb_image.cols; j++){
rgb_data[counter] = rgb_image.at<cv::Vec3f>(i,j)[z] ;
counter++;
}

有人知道哪里出了问题吗?
有更简单的方法吗?
我知道有 stackoverflow-examples为了将 cv::Mat 转换为 std::vector,C++ 数组是否可能有类似的东西?输出尺寸应为 [Rows x Cols x Channel]

最佳答案

你有两个问题:

  1. rafix07指出:使用[]代替()

  2. rgb_image.at(i,j)[z] 给出 3 个 float 而不是 1 个

我建议使用 std::memcpy

float *rgb_data = new float(rgb_image.rows * rgb_image.cols * rgb_image.channels()); // Dst
float* dataPointer = reinterpret_cast<float*>(rgb_image.data); // Src
// pointer from, pointer two, size in bytes
std::memcpy(rgb_data, dataPointer, rgb_image.rows * rgb_image.cols * rgb_image.channels() * sizeof(float));

它经过优化,可能比循环更好 :)

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

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