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处理了,点赞收藏呀

相关推荐
视***间16 小时前
275TOPS算力边缘计算盒子的价值洞察与市场定位---视程空间
人工智能·边缘计算
AI模块工坊16 小时前
AAAI 2025 | 即插即用,川大Mesorch刷新SOTA,用「介观」Transformer架构终结图像造假
人工智能·深度学习·计算机视觉·架构·transformer
周杰伦_Jay16 小时前
【OpenManus深度解析】MetaGPT团队打造的开源AI智能体框架,打破Manus闭源壁垒。包括架构分层、关键技术特点等内容
人工智能·深度学习·opencv·架构·开源
文火冰糖的硅基工坊16 小时前
[嵌入式系统-146]:五次工业革命对应的机器人形态的演进、主要功能的演进以及操作系统的演进
前端·网络·人工智能·嵌入式硬件·机器人
猫头虎16 小时前
openAI发布的AI浏览器:什么是Atlas?(含 ChatGPT 浏览功能)macOS 离线下载安装Atlas完整教程
人工智能·macos·chatgpt·langchain·prompt·aigc·agi
老六哥_AI助理指南16 小时前
为什么AI会改变单片机的未来?
人工智能·单片机·嵌入式硬件
SEO_juper16 小时前
2026 AI可见性:构建未来-proof策略的顶级工具
人工智能·搜索引擎·百度·工具·数字营销
sivdead16 小时前
当前智能体的几种形式
人工智能·后端·agent
AIGC_北苏16 小时前
大语言模型,一个巨大的矩阵
人工智能·语言模型·矩阵
算家计算17 小时前
DeepSeek-OCR本地部署教程:DeepSeek突破性开创上下文光学压缩,10倍效率重构文本处理范式
人工智能·开源·deepseek