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

相关推荐
黎燃几秒前
AI助力垃圾分类与回收的可行性研究:从算法到落地的深度解析
人工智能
强盛小灵通专卖员9 分钟前
DL00291-联邦学习以去中心化锂离子电池健康预测模型完整实现
人工智能·机器学习·深度强化学习·核心期刊·导师·小论文·大论文
Hello123网站18 分钟前
多墨智能-AI一键生成工作文档/流程图/思维导图
人工智能·流程图·ai工具
有Li1 小时前
CLIK-Diffusion:用于牙齿矫正的临床知识感知扩散模型|文献速递-深度学习人工智能医疗图像
人工智能·深度学习·文献·医学生
大唐荣华1 小时前
视觉语言模型(VLA)分类方法体系
人工智能·分类·机器人·具身智能
即兴小索奇1 小时前
AI应用商业化加速落地 2025智能体爆发与端侧创新成增长引擎
人工智能·搜索引擎·ai·商业·ai商业洞察·即兴小索奇
NeilNiu1 小时前
开源AI工具Midscene.js
javascript·人工智能·开源
nju_spy2 小时前
机器学习 - Kaggle项目实践(4)Toxic Comment Classification Challenge 垃圾评论分类问题
人工智能·深度学习·自然语言处理·tf-idf·南京大学·glove词嵌入·双头gru
计算机sci论文精选2 小时前
CVPR 2025 | 具身智能 | HOLODECK:一句话召唤3D世界,智能体的“元宇宙练功房”来了
人工智能·深度学习·机器学习·计算机视觉·机器人·cvpr·具身智能
ezl1fe2 小时前
RAG 每日一技(十八):手写SQL-RAG太累?LangChain的SQL智能体(Agent)前来救驾!
数据库·人工智能·后端