opencv 读取3G大图失败,又不想重新编译opencv ,可以如下操作

先到这里:nothings/stb: stb single-file public domain libraries for C/C++下载一个stb_image.h头文件,把其放到工程里,然后添加如下代码:

cpp 复制代码
#include <opencv2/opencv.hpp>
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"  // 确保路径正确

int main() {
    const char* filename = "huge_image.bmp";  // 支持 BMP/PNG/JPEG/TIFF等

    // 1. 使用 STB Image 加载图像
    int width, height, channels;
    unsigned char* data = stbi_load(filename, &width, &height, &channels, 0);
    
    if (!data) {
        std::cerr << "Error: Failed to load image (" << stbi_failure_reason() << ")" << std::endl;
        return -1;
    }

    // 2. 将数据转换为 OpenCV Mat
    cv::Mat img;
    switch (channels) {
        case 1:  // 灰度图
            img = cv::Mat(height, width, CV_8UC1, data);
            break;
        case 3:  // RGB
            img = cv::Mat(height, width, CV_8UC3, data);
            cv::cvtColor(img, img, cv::COLOR_RGB2BGR);  // STB 返回 RGB,OpenCV 默认 BGR
            break;
        case 4:  // RGBA
            img = cv::Mat(height, width, CV_8UC4, data);
            cv::cvtColor(img, img, cv::COLOR_RGBA2BGRA);
            break;
        default:
            std::cerr << "Error: Unsupported number of channels: " << channels << std::endl;
            stbi_image_free(data);
            return -1;
    }

    // 3. 检查转换结果
    if (img.empty()) {
        std::cerr << "Error: Failed to create cv::Mat" << std::endl;
        stbi_image_free(data);
        return -1;
    }

    std::cout << "Success! Image size: " << img.cols << "x" << img.rows 
              << ", Channels: " << img.channels() << std::endl;

    // 4. 释放 STB Image 内存(注意:此时 Mat 仍引用数据!)
    // 如果后续需要独立使用 Mat,需克隆数据:
    // cv::Mat img_clone = img.clone();
    // stbi_image_free(data);

    // 直接使用 img(需确保在释放 data 前完成操作)
    cv::imshow("Image", img);
    cv::waitKey(0);

    stbi_image_free(data);  // 释放内存
    return 0;
}

最好是使用stb_img读取内存后转mat,然后立刻clone,然后是否stb的内存,这样就可以使用opencv处理了,点赞收藏呀

相关推荐
明志数科3 小时前
具身智能数据工程观察:“数据筑基“时代的数据底座建设路径
人工智能·机器人
m0_614523554 小时前
普通视频怎么做多场景一镜到底:路线设计、逐段衔接与整体验收
人工智能·音视频
海宇服务5 小时前
零信任架构实战:基于海宇对外投资历史查询服务构建自动化供应商准入网关
运维·人工智能·架构·自动化
东风破_5 小时前
别急着上 Agentic RAG:先用 LangGraph 把最小 RAG 跑明白
人工智能
LaughingZhu5 小时前
Product Hunt 每日热榜 | 2026-09-12
人工智能·深度学习·神经网络·搜索引擎·百度
天真小巫5 小时前
2026.9.13总结(工作量日益繁重的当下,AI如何提效)
人工智能
Zguigo5 小时前
【CUDA1】GPUvsCPU,CUDA Kernel
人工智能·pytorch·深度学习
thesky1234565 小时前
用 ONNX Runtime 把 PyTorch 模型变成跨平台极速推理引擎:导出、优化、量化完整实
人工智能·深度学习·模型部署
米小虾6 小时前
把 KV Cache 从 3514 字节压到 890 字节:DeepSeek V4.1-Flash 动了什么,又没动什么
人工智能
锋行天下6 小时前
LangGraph 进阶:Command + Send 动态控制流、并行 Map-Reduce 实战与踩坑
人工智能