当前位置: 首页 > ai >正文

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

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

#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 Matcv::Mat img;switch (channels) {case 1:  // 灰度图img = cv::Mat(height, width, CV_8UC1, data);break;case 3:  // RGBimg = cv::Mat(height, width, CV_8UC3, data);cv::cvtColor(img, img, cv::COLOR_RGB2BGR);  // STB 返回 RGB,OpenCV 默认 BGRbreak;case 4:  // RGBAimg = 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处理了,点赞收藏呀

http://www.xdnf.cn/news/1193.html

相关文章:

  • AI催生DLP新战场 | 天空卫士连续6年入选Gartner 全球数据防泄漏(DLP)市场指南
  • 工程投标k值分析系统(需求和功能说明)
  • 【项目】基于MCP+Tabelstore架构实现知识库答疑系统
  • move闯关(更新啦)1
  • 力扣刷题Day 25:反转链表(206)
  • 输入框仅支持英文、特殊符号、全角自动转半角 vue3
  • C# foreach 循环中获取索引的完整方案
  • PCIe体系结构学习入门——PCI总线概述(一)PCI 总线的基础知识
  • [预备知识]4. 概率基础
  • 关于ubuntu密码正确但是无法登录的情况
  • Android-KeyStore安全的存储系统
  • P3909 异或之积 解题报告
  • QML FontDialog:使用FontDialog实现字体选择功能
  • 【重走C++学习之路】16、AVL树
  • Java练习——day3
  • qemu如何支持vmovdqa64指令(百度AI)
  • 游戏工作室为何要更换IP进行多开?工作室使用代理IP要注意什么?
  • 35.编写一个简单的Mybatis插件
  • ​​电商系统用户需求报告(示例)
  • 随着ai技术的应用,及玩具类产品的层出不穷,开发此类产品的情感AI算法技术的底层构架,及情感AI算法的应用场景是转型的比较好的一个方向
  • HTTP状态码有哪些常见的类型?
  • 三网通电玩城平台系统结构与源码工程详解(四):子游戏集成与服务器调度机制全解
  • Spring AOP + Logback + MDC全链路日志追踪
  • 三线服务器通常适用于哪些用户?
  • GPIO(通用输入输出端口)详细介绍
  • 【T2I】TOKENCOMPOSE: Text-to-Image Diffusion with Token-level Supervision
  • 【2025最新面试Java八股】Java虚拟线程怎么回事,是协程吗?
  • 解决开启代理时无法正常使用Microsoft Store, OneDrive, Outlook等应用的问题
  • 构建“穿戴+云端”落水应急响应体系,为海上作业人员打造全天候、全场景的安全守护网
  • 三网通电玩城平台系统结构与源码工程详解(三):控制台与银商权限模块设计