• 详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示


    详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示

    01-详解函数imread():读取图像文件

    函数imread()用于读取图像文件。
    函数imread()的c++原型如下:

    Mat cv::imread(const String & filename,
                   int flags = IMREAD_COLOR)
    
    • 1
    • 2

    函数imread()的Python原型如下:

    retval = cv.imread(filename[, flags])
    
    • 1

    函数imread()返回的是Mat对象,如果读取文件失败,函数会返回一个空矩阵,假设src_image是Mat对象,则此时src_image.data的值是NULL。因此正常读取完文件后,我们可以利用src_image.data或src_image.epmty()函数进行返回值检查,以确保文件正常载入。
    示例如下:

    if (src_image.data == NULL)
    {
    	std::cout << "Error: Could not load image" << std::endl;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    if (src_image.empty())
    {
    	std::cout << "Error: Could not load image" << std::endl;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    接下来介绍函数imread()的两个参数。
    filename:
    待读取图像文件的路径和文件名。
    flags:
    表示读取模式,默认参数为“IMREAD_COLOR”,表示将读取的图像转化成三通道的BGR彩色图像。
    其它常用模式还有:
    “IMREAD_GRAYSCALE”,表示将读取的图像转化成灰度图像
    “IMREAD_UNCHANGED ”,表示不对图像进行转化处理。
    在OpenCV4.x中一共有13种读取模式,更多模式请参阅下面的链接。
    https://docs.opencv.org/4.4.0/d4/da8/group__imgcodecs.html#ga61d9b0126a3e57d9277ac48327799c80

    关于函数Python-OpenCV中imread()读取的图像数据的存储格式,昊虹君认为大家也要必要了解一下,详情见链接 https://www.hhai.cc/thread-89-1-1.html

    02-详解函数imshow():显示图像

    函数imshow()用于显示图像。
    函数imshow()的c++原型如下:

    void cv::imshow(const String & winname,
                    InputArray mat)	
    
    • 1
    • 2

    函数imshow()的Python原型如下:

    None=cv.imshow(winname, mat)
    
    • 1

    参数意义如下:
    winname:
    图像显示窗口的名字。
    mat:
    待显示的图像,实际上是一个Matc对象。

    使用函数imshow()时要注意,该函数在显示前会对数据进行归一化处理,那么具体的归一化规则是什么呢?请参阅页面 https://www.hhai.cc/thread-86-1-1.html

    如果您需要对显示图像的窗口作一些调整,那么你需要使用到函数namedWindow(),关于函数namedWindow()的详细介绍,请大家参考页面 https://www.hhai.cc/thread-87-1-1.html

    03-使用函数imread()和imshow()读取并显示一幅图像

    C++代码如下:

    //出处:昊虹AI笔记网(hhai.cc)
    //用心记录计算机视觉和AI技术
    
    //博主微信/QQ 2487872782
    //QQ群 271891601
    //欢迎技术交流与咨询
    
    //OpenCV版本 OpenCV3.0
    
    #include 
    #include 
    
    using namespace cv;
    
    int main()
    {
    	Mat src_image = imread("F:/material/images/2022/2022-10/bxf_small.jpg");
    
    	imshow("Source Image", src_image);
    
    	waitKey();
    	return(0);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    Python代码如下:

    # -*- coding: utf-8 -*-
    # 出处:昊虹AI笔记网(hhai.cc)
    # 用心记录计算机视觉和AI技术
    
    # 博主微信/QQ 2487872782
    # QQ群 271891601
    # 欢迎技术交流与咨询
    
    # OpenCV的版本为4.4.0
    
    import cv2 as cv
    
    src_image = cv.imread('F:/material/images/2022/2022-10/bxf_small.jpg')
    cv.imshow('Source Image', src_image)
    
    cv.waitKey(0)
    cv.destroyAllWindows()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    C++代码和Python代码的运行结果相同,截图如下:
    在这里插入图片描述

  • 相关阅读:
    20230904工作心得:集合应该如何优雅判空?
    【LeetCode-2326】螺旋矩阵IV
    取消elementUI中table的选中状态和勾选状态赋值
    第一届“龙信杯”电子数据取证竞赛Writeup
    NMS原理及其代码实现
    vue3.2 导出pdf文件或表格数据
    ardupilot避障代码分析
    使用 ESP32 设计和控制四足蜘蛛机器人之硬件结构设计篇
    小程序添加隐私保护指引弹框(包含配置隐私保护指引方法)
    Elasticsearch:ES|QL 的限制
  • 原文地址:https://blog.csdn.net/wenhao_ir/article/details/127406659