如何用c++和OpenCV读取并显示一张图片 计算机视觉入门第一步【教程】


C++和OpenCV读取显示图片需三步:配置环境、加载图片、创建窗口;关键在正确安装链接OpenCV,用cv::imread读图并检查img.empty()确保成功。

用C++和OpenCV读取并显示一张图片,是计算机视觉入门最基础也最关键的一步。核心就三件事:配置好环境、加载图片、创建窗口展示——只要代码写对,几秒就能看到结果。

确保OpenCV已正确安装并链接到项目

这是最容易卡住的环节。如果你还没装OpenCV,推荐用包管理器安装(如Windows用vcpkg、macOS用Homebrew、Ubuntu用apt),比源码编译简单得多。在CMakeLists.txt里要包含OpenCV库:

  • find_package(OpenCV REQUIRED)
  • target_link_libraries(your_project_name ${OpenCV_LIBS})
  • include_directories(${OpenCV_INCLUDE_DIRS})

如果用IDE(如VS或CLion),记得检查是否把OpenCV的include路径和lib路径都加进去了,否则会报undefined referenceno such file错误。

用cv::imread()读取图片,注意路径和返回值

cv::imread()是读图函数,但它不会报错提示“文件不存在”,而是悄悄返回一个空的cv::Mat对象。所以务必检查是否读成功:

立即学习“C++免费学习笔记(深入)”;

  • cv::Mat img = cv::imread("lena.jpg");
  • if (img.empty()) { std::cerr

路径尽量用相对路径(比如放在项目根目录下),避免硬编码绝对路径。中文路径在Windows上容易出问题,建议全用英文命名。

用cv::imshow()显示图片,别忘了cv::waitKey()

显示图片不能只调用imshow,它只是把图像送到窗口缓冲区,真正让窗口弹出来并保持住,靠的是cv::waitKey()

  • cv::imshow("原图", img);
  • cv::waitKey(0); // 按任意键退出
  • // 或 cv::waitKey(1000); // 自动等1秒后关闭

漏掉waitKey会导致窗口一闪而过,或者根本看不到——这是新手最常踩的坑。

完整可运行示例代码(带注释)

把下面这段保存为show_image.cpp,编译运行即可:

#include 
#include 

int main(int argc, char** argv) { // 读取图片(替换成你自己的图片路径) cv::Mat img = cv::imread("test.jpg"); if (img.empty()) { std::cerr << "错误:图片未加载,请检查文件名和路径\n"; return -1; }

// 显示图片
cv::imshow("显示窗口", img);

// 等待按键(0表示无限等待)
cv::waitKey(0);

return 0;

}

只要OpenCV环境没问题,这张图就会稳稳地出现在窗口里——你已经迈出了计算机视觉的第一步。


# windows  # 计算机  # ubuntu  # mac  # c++  # macos  # win  # cos  # 报错提示  # red  # if  # include  # cerr  # undefined  # 对象  # ide  # opencv  # 这是  # 加载  # 会报  # 自己的  # 的是  # 就会  # 如果你  # 还没  # 放在  # 去了 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Win11怎么关闭边缘滑动手势_Windows11禁用触摸屏边缘操作  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Windows蓝屏BAD_POOL_HEADER故障详解_蓝屏池损坏错误修复指南  Win11怎么开启专注模式_Windows11时钟应用Focus Session  如何使用Golang实现微服务事件驱动_使用消息总线解耦服务  c++的static关键字有什么用 静态变量和静态函数的应用场景【教程】  如何在Golang中实现并发消息队列消费者_Golang channel消息消费实践  php485在macos下怎么配置_php485 macOS系统配置指南【解答】  Win11怎么设置DNS服务器_Windows11修改网络适配器DNS优选  如何使用Golang操作指针变量_Golang解引用与赋值实践  Python文件管理规范_工程实践说明【指导】  c++获取当前时间戳_c++ time函数使用详解  Win11怎么看电池循环次数_Win11笔记本电池寿命检测【命令】  XAMPP 启动失败(Apache 突然停止)的终极排查与修复指南  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  VSC怎么在PHP中调试MySQL_数据库交互排查技巧【教程】  Win11怎么更改系统语言_Win11中文语言包下载与安装【指南】  Windows服务启动类型恢复方法_错误修改导致的系统服务异常  Win11怎么清理C盘系统日志_Win11清理系统日志文件【步骤】  Win11如何设置环境变量 Win11添加和修改系统与用户变量【教程】  如何在 Go 同包不同文件中正确引用结构体  Linux如何挂载新硬盘_Linux磁盘分区格式化与开机自动挂载【指南】  Win11怎么关闭自动更新 Win11永久关闭系统更新的有效方法【技巧】  Mac如何修改Hosts文件?(本地开发与屏蔽网站)  XSLT怎么生成动态的HTML属性名和标签名  Win11怎么设置任务栏图标大小_Windows11注册表TaskbarSi修改  Win11怎么关闭触摸屏_禁用Win11笔记本触摸屏功能设置【教程】  Win11怎么关闭自动维护 Win11禁用系统自动维护功能【优化】  Win11怎么更改电脑名称_Windows 11修改计算机名操作指南【步骤】  如何解决Windows时间不准的问题?(自动同步设置)  如何在同包不同文件中正确引用 Go 结构体  php怎么下载安装后测试是否成功_简单脚本验证方法【操作】  c++输入输出流 c++ cin与cout格式化输出【方法】  Win11如何连接Xbox手柄 Win11蓝牙连接游戏手柄教程【步骤】  Win11怎么设置任务栏透明_Windows11使用工具美化任务栏  Golang如何测试HTTP中间件_Golang HTTP中间件功能测试实践  Win10怎样设置闹钟贪睡时间 Win10闹钟贪睡时长设置【步骤】  如何在JavaScript中动态拼接PHP的base_url与jQuery变量  如何使用Golang sort排序切片_Golang sort排序方法示例  电脑无法识别U盘怎么办 Windows磁盘管理与驱动更新修复识别问题【解决】  如何使用Golang template生成文本模板_动态生成HTML或文本  微信短链接怎么还原php_用浏览器开发者工具抓包获取【方法】  c++怎么处理多线程死锁_c++ lock_guard与unique_lock锁管理【技巧】  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  MAC如何安装Git版本控制工具_MAC开发环境配置与Xcode插件安装【教程】  Win11怎么忘记WiFi网络_Win11删除已保存无线连接【教程】  如何在Golang中实现文件下载_Golang文件传输与内容类型处理方法  Python大文件处理策略_内存优化说明【指导】  Win11怎么查看wifi信号强度_检测Windows 11无线网络质量方法【详解】  如何开启Windows的远程服务器管理工具(RSAT)?(管理服务器) 

 2026-01-05

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.