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

相关推荐
智写-AI29 分钟前
真实有效的免费降英文AI工具服务商
人工智能·python
大鹏的NLP博客30 分钟前
深度学习模型部署一致性验证规范
人工智能·深度学习
土星云SaturnCloud35 分钟前
边缘计算驱动绿氢生产过程智能寻优:电解槽级实时优化技术解析
服务器·人工智能·ai·边缘计算
Urbano1 小时前
校服精细化缝制难点、全流程自动化改造方案与核心贴袋设备选型实操科普
人工智能
IT_陈寒1 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端
零零信安1 小时前
AI智能体,攻守失衡的催化剂 | 零零信安
人工智能·网络安全·数据泄露·暗网·零零信安
IvorySQL1 小时前
PG 日报|社区讨论重构 pg_hba 配置文件格式
数据库·人工智能·postgresql·重构·ivorysql
白色机械键盘2 小时前
基于多智能体协作的预测性运维误报分级治理架构研究
人工智能
Web极客码2 小时前
突破并发瓶颈:云端高性能架构如何赋能海外 AI Agent 矩阵的高效产出
服务器·人工智能·架构
甲维斯2 小时前
P图自由!把字节SeeDream5pro接入Jimage!
人工智能