OpenCV读取照片和可视化详解和代码示例

发布于:2025-07-01 ⋅ 阅读:(17) ⋅ 点赞:(0)

下面进行 OpenCV 读取照片和可视化(显示)详解与完整 C++ 示例代码,适用于 Windows 或 Linux 平台的 OpenCV 4.x 版本。


一、核心函数简析

函数 功能
cv::imread() 从文件读取图像
cv::imshow() 在窗口中显示图像
cv::waitKey() 等待键盘输入(防止窗口闪退)
cv::imwrite() 保存图像到文件
cv::resize() 图像缩放(可选)
cv::cvtColor() 图像颜色空间转换(如 BGR→灰度)

二、完整 C++ 示例代码

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    // 1. 图像文件路径(支持相对或绝对路径)
    std::string imagePath = "example.jpg";  // 确保文件存在于工作目录

    // 2. 使用 imread 读取图像(默认 BGR 读入)
    cv::Mat image = cv::imread(imagePath, cv::IMREAD_COLOR);  // 或 cv::IMREAD_GRAYSCALE

    // 3. 检查图像是否成功加载
    if (image.empty()) {
        std::cerr << "无法加载图像: " << imagePath << std::endl;
        return -1;
    }

    // 4. 可选:调整图像大小
    cv::Mat resizedImage;
    cv::resize(image, resizedImage, cv::Size(640, 480));  // 改变为 640x480

    // 5. 显示图像
    cv::imshow("原图", image);
    cv::imshow("缩放图", resizedImage);

    // 6. 等待用户按任意键关闭窗口
    std::cout << "按任意键关闭图像窗口..." << std::endl;
    cv::waitKey(0);  // 0 表示无限等待

    return 0;
}

三、常用参数说明(imreadimshow

cv::imread(path, flag) 常见 flag 值:

标志 含义
IMREAD_COLOR (默认) 读入彩色图,忽略 alpha 通道
IMREAD_GRAYSCALE 灰度图
IMREAD_UNCHANGED 保留 alpha 通道

cv::waitKey(ms)

  • 等待 ms 毫秒内的键盘输入,如果 ms = 0,表示无限等待。

  • 可以捕获键值,例如:

    int key = cv::waitKey(0);
    if (key == 27) { // 27 是 ESC
        std::cout << "按下了 ESC,退出程序" << std::endl;
    }
    

四、图像保存示例

cv::imwrite("resized_output.jpg", resizedImage);

五、常见问题排查

问题 原因 解决方案
image.empty() 为真 图像路径错误、文件不存在或格式不支持 检查路径和扩展名,建议用绝对路径测试
imshow 窗口一闪而过 没有 cv::waitKey() 加上 cv::waitKey(0)
中文路径无法读取 OpenCV 不支持中文路径(Windows) 将文件放入英文路径下
颜色异常 OpenCV 默认是 BGR 而非 RGB 转换:cv::cvtColor(img, img_rgb, cv::COLOR_BGR2RGB);

六、拓展建议

  • 加载多图显示:

    std::vector<std::string> imgs = {"1.jpg", "2.jpg"};
    for (const auto& path : imgs) {
        cv::Mat img = cv::imread(path);
        cv::imshow(path, img);
    }
    cv::waitKey(0);
    
  • 显示灰度图:

    cv::Mat gray;
    cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
    cv::imshow("灰度图", gray);
    


网站公告

今日签到

点亮在社区的每一天
去签到