C++的Opencv将图像从HWC转为CHW

        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读取出来后续使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值