C++如何使用OpenCV读取和显示一张图片?(图像处理入门)

OpenCV C++读图显示需配置环境、处理路径并管理窗口:包含头文件,用cv::imread读取图像,检查img.empty(),调用cv::namedWindow和cv::imshow显示,以cv::waitKey(0)保持窗口,最后cv::destroyAllWindows()释放资源。

用OpenCV在C++中读取并显示一张图片,只需要几行核心代码,但要注意环境配置、路径处理和窗口管理这些关键点。

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

编译前必须确认:OpenCV库已安装,且C++项目已正确配置头文件路径(include/opencv2)和链接库(如opencv_imgcodecsopencv_highguiopencv_imgproc)。使用CMake时需添加:

  • find_package(OpenCV REQUIRED)
  • target_link_libraries(your_target ${OpenCV_LIBS})

包含必要头文件并读取图像

OpenCV用cv::Mat存储图像。读取时指定路径和读取模式(如cv::IMREAD_COLOR):

  • 路径建议用绝对路径或确保工作目录正确,中文路径在Windows下可能出错,优先用英文路径
  • 读取失败时mat.empty()返回true,应检查路径和文件是否存在

示例代码片段:

#include 
cv::Mat img = cv::imread("lena.jpg", cv::IMREAD_COLOR);
if (img.empty()) {
    std::cerr << "无法加载图像!请检查路径。\n";
    return -1;
}

创建窗口并显示图像

cv::namedWindow创建窗口,再用cv::imshow刷新显示:

  • 窗口名需与imshow中一致;重复调用namedWindow无副作用
  • 必须配合cv::waitKey(0)等待按键,否则窗口会一闪而逝;参数0表示无限等待,非0值为毫秒数
  • 最后可加cv::destroyAllWindows()释放资源(非必需但推荐)

续接上段代码:

cv::namedWindow("Display", cv::WINDOW_AUTOSIZE);
cv::imshow("Display", img);
cv::waitKey(0); // 按任意键继续
cv::destroyAllWindows();

常见问题快速排查

如果图像不显示或报错,优先检查:

  • 图像文件是否真实存在于指定路径(右键属性看完整路径)
  • CMakeLists.txt或IDE中是否漏链接opencv_imgcodecs(负责读写)和opencv_highgui(负责GUI)
  • Linux/macOS下缺少GTK或Qt后端支持,可重装带GUI支持的OpenCV;Windows一般无此问题
  • OpenCV版本差异:4.x默认不启用某些解码器,确保安装时启用了JPEG/PNG支持