Opencv默认读取的图像格式是BGR,顺序为HWC。但是做深度学习推理的时候往往需要RGB,CHW的格式,因此需要转换。

一、BGR转RGB

        将其封装成一个函数,读取出来的就是RGB格式: 

// 加载图像并转为RGB
cv::Mat load_image(const std::string& filepath) {
    cv::Mat img = cv::imread(filepath, cv::IMREAD_COLOR);
    if (img.empty()) {
        throw std::runtime_error("无法加载图像: " + filepath);
    }
    cv::cvtColor(img, img, cv::COLOR_BGR2RGB); // 转换为RGB格式
    return img;
}
// 调用load_image
cv::Mat img = load_image(image_path);

二、HWC转为CHW 

        我在网上找了许久Opencv将HWC转为CHW的代码,但是发现无一可用,后来去onnxruntime官方下面查看推理例程发现了转换的代码,非常简单(这里包含了我的一些数据预处理,可忽略):

#include <opencv2/dnn.hpp>
#include <opencv2/opencv.hpp>
// 加载图像
cv::Mat img = load_image(image_path);
// 获取图像hwc
int h = img.rows;
int w = img.cols;
int c = img.channels();
// 将其数据转成float格式
cv::Mat img_float;
img.convertTo(img_float, CV_32F);
// 归一化图像数据到 [0, 1] 范围
img_float /= 255.0f;
// HWC to CHW
cv::Mat image_chw;
cv::dnn::blobFromImage(img_float, image_chw); 

        通过调用cv::dnn::blobFromImage函数即可。这里转换成CHW格式之后是无法通过image_chw.rows和image_chw.cols获取图像的h和w,因此在转换成CHW格式之前先将h和w读取出来后续使用。

GitHub 加速计划 / opencv31 / opencv
189
14
下载
OpenCV: 开源计算机视觉库
最近提交(Master分支:7 个月前 )
09a85e97 Update js_houghcircles_HoughCirclesP.html 1 天前
e826a41e Dropped inefficient (disabled) IPP integration for LUT. 1 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐