【OpenCV】关于OpenCV中imread/imwrite/imshow/cvtColor等 Api的简单描述和使用

news/2024/7/21 6:02:05 标签: opencv, 计算机视觉, 图像处理

文章目录

      • 01、imread
      • 02、imwrite
      • 03、imshow
      • 04、namedWindow
      • 05、cvtColor
      • 06、小结

01、imread

  1. 官方定义

    imread函数是OpenCV中的一个函数,用于从文件中读取图像。该函数支持读取多种图像格式,包括BMP、JPEG、PNG、TIF等常见格式。

CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
/*
* imread: 读取图片,参数如下
* CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
* filename: 图片的绝对路径
* flags: 读取图像的模式   例如: 加载灰度图片 IMREAD_GRAYSCALE   加载透明通道图片 IMREAD_UNCHANGED
* 返回值:
* 若成功读取图像,则返回Mat类型的图像矩阵。
* 若读取失败,则返回一个空的Mat矩阵。
*/

tips: 注意这里imread函数加载的是8bit 图像

  1. 示例
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 读取图像
    Mat img = imread("C:/openCV_image/WeChatTouXiang.jpg"); 

    // 判断是否读取成功
    if (img.empty())
    {
        cout << "Failed to load image!" << endl;
        return -1;
    }

    // 显示图像
    imshow("Image", img);

    // 等待按键按下
    waitKey(0);

    return 0;
}

02、imwrite

  1. 官方定义

    imwrite函数是OpenCV中的一个函数,用于将图像写入文件中。该函数支持写入多种图像格式,包括BMP、JPEG、PNG、TIF等常见格式。

CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
/*
* imread: 写入图片
* filename:待读取的图像文件路径。
* flags:读取图像的模式。
* 返回值:
* 若成功读取图像,则返回Mat类型的图像矩阵。
* 若读取失败,则返回一个空的Mat矩阵。
*/
  1. 示例
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 读取图像
    Mat img = imread("C:/openCV_image/WeChatTouXiang.jpg");

    // 判断是否读取成功
    if (img.empty())
    {
        cout << "Failed to load image!" << endl;
        return -1;
    }

    // 写入图像
    bool ret = imwrite("C:/openCV_image/WeChatTouXiang_copy.jpg", img);

    // 判断是否写入成功
    if (ret)
    {
        cout << "Image saved successfully!" << endl;
    }
    else
    {
        cout << "Failed to save image!" << endl;
        return -1;
    }

    return 0;
}

需要注意的是,imwrite函数默认将图像写入为BGR格式,如果想将图像保存为灰度图像或其他格式,则需要在调用imwrite函数时指定相应的参数。例如,写入灰度图像的方式如下:

bool ret = imwrite("C:/openCV_image/WeChatTouXiang_copy.jpg", img, vector<int>{CV_IMWRITE_JPEG_QUALITY, 100});

其中,CV_IMWRITE_JPEG_QUALITY指定写入为JPEG格式,100表示图像质量。同时,注意params参数是一个vector类型的变量,用于传递写入图像的参数。

03、imshow

  1. 官方定义

    imshow函数是OpenCV中用于显示图像的函数,可以将图像显示在窗口中。

CV_EXPORTS_W void imshow(const String& winname, InputArray mat);
/*
* imshow: 显示图片
* CV_EXPORTS_W void imshow(const String& winname, InputArray mat);
* winname:显示的窗口名称/标题
* mat:获取的图像矩阵,即Mat类
* 返回值:void
*/
  1. 示例
#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    // 读取图像
    Mat img = imread("C:/openCV_image/WeChatTouXiang.jpg");

    // 创建窗口
    namedWindow("Image", WINDOW_AUTOSIZE);

    // 显示图像
    imshow("Image", img);

    // 等待用户按键
    waitKey(0);

    // 关闭窗口
    destroyAllWindows();

    return 0;
}

需要注意的是,imshow函数仅能在图形用户界面(GUI)环境下使用,即必须在图形界面的窗口中显示图像。如果在命令行环境下运行OpenCV应用程序,就需要使用其他的方法显示图像。

04、namedWindow

  1. 官方定义

    namedWindow函数是OpenCV中用于创建新窗口的函数

CV_EXPORTS_W void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
/*
* namedWindow: 创建一个新的窗口,可以设置加载大小
* CV_EXPORTS_W void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
* winname: 窗口的名称,支持中文
* flags: 可选参数,用于指定窗口的属性,如窗口是否可调整大小、是否具有滚动条等。   WINDOW_FREERATIO:自由比例,可以拖动大小
*/
  1. 示例
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 创建一个名为"Example"的新窗口
    namedWindow("Example", WINDOW_AUTOSIZE);

    // 读取一张图像
    Mat image = imread("C:/openCV_image/shenlilinghua.jpg");

    // 在窗口中显示图像
    imshow("Example", image);

    // 等待用户按下任意键后关闭窗口
    waitKey(0);

    // 关闭窗口
    destroyWindow("Example");
    //或者  destroyAllWindow();

    return 0;
}

05、cvtColor

  1. 官方定义

    cvtColor函数是OpenCV中用于颜色转换的函数

CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
/*
* src: 输入图像(Mat)
* dst: 输出图像(Mat)
* code: 转换代码
* dstCn: 输出图像的通道数(默认为0,表示与输入图像相同)
*/
  1. 示例
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 读取一张彩色图像
    Mat color = imread("C:/openCV_image/WeChatTouXiang.jpg");

    // 将彩色图像转换成灰度图像
    Mat gray,hsv;
    cvtColor(color, gray, COLOR_BGR2GRAY);
    cvtColor(color, hsv,  COLOR_BGR2HSV);

    // 在窗口中显示灰度图像
    imshow("Gray", gray);
    // 在窗口中显示Hsv图像
    imshow("Hsv", hsv);

    // 等待用户按下任意键后关闭窗口
    waitKey(0);

    return 0;
}

需要注意的是,在使用cvtColor函数时,必须确定转换代码,这里我们使用了COLOR_BGR2GRAY表示将BGR颜色空间转换成灰度颜色空间。

06、小结

学习OpenCV第二天,一些API的使用示例和用法总结,记录一下还是新手的自己,大佬请跳过!


http://www.niftyadmin.cn/n/399740.html

相关文章

王者荣耀战区活跃度排名怎么实现的?这篇文章给你答案!

&#x1f349;博客主页:阿博历练记 &#x1f4d6;文章专栏:数据结构与算法 &#x1f68d;代码仓库:阿博编程日记 &#x1f365;欢迎关注:欢迎友友们点赞收藏关注哦&#x1f339; 文章目录 &#x1f308;前言&#x1f36a;堆的实现&#x1f50d;1.堆的结构框架&#x1f50d;2.堆…

DBA之路--RMAN备份与恢复02_RMAN配置、备份和恢复操作基础

RMAN配置、备份和恢复操作基础 3.1、设置与配置 RMAN需要在归档模式下进行操作&#xff0c;是需要CDB或者说整个数据库处于归档模式&#xff0c;单个pdb处于归档模式并没有用。归档模式下日志存储位置有两个&#xff0c;oracle得FRA区域该区域为默认存储位置&#xff0c;二是…

Mysql进阶【1】论述索引,索引数据结构,MVCC

1. ReadView 案例&#xff0c;解释为什么 RR 和 RC 隔离级别下看到查询结果不一致 案例 01- 读已提交 RC 隔离级别下的可见性分析 开启两个回话&#xff0c;会话事务级别都是READ-COMMITED; 操作步骤 开启两个数据库会话&#xff0c;设置事务为提交读事务2查询id1数据&#…

4种整流电路和5种滤波电路

4种整流电路和5种滤波电路 基本电路&#xff1a;一般直流稳压电源都使用220伏市电作为电源&#xff0c;经过变压、整流、滤波后输送给稳压电路进行稳压&#xff0c;最终成为稳定的直流电源。这个过程中的变压、整流、滤波等电路可以看作直流稳压电源的基础电路&#xff0c;没有…

Vue基础第二篇

一、事件指令 1.vm对象 总结&#xff1a; 1 写在data或method中的属性或方法&#xff0c;从vm中直接可以 . 出来 2 methods的函数中&#xff0c;如果想使用data或methods中的属性&#xff0c;直接this.名字 就可以了 示例&#xff1a; <!DOCTYPE html> <html la…

Yolov8涨点神器:创新卷积块NCB和创新Transformer 块NTB,助力检测,提升检测精度

🏆🏆🏆🏆🏆🏆Yolov8魔术师🏆🏆🏆🏆🏆🏆 ✨✨✨魔改网络、复现前沿论文,组合优化创新 🚀🚀🚀小目标、遮挡物、难样本性能提升 🍉🍉🍉定期更新不同数据集涨点情况 本博客将具有部署友好机制的强大卷积块和变换块,即NCB和NTB,引入到yolo…

聊聊公司技术上的奇葩规定——计算机使用

首先说明下公司的技术架构。 MySQL PHP Java&#xff0c;纯互联网应用&#xff0c;Docker 容器部署微服务在 AWS 上面。 数据上没有过多敏感性&#xff0c;不涉及到很多敏感数据&#xff0c;身份识别信息通常使用的是第三方平台&#xff0c;我们本地不存储用户身份信息。 电…

第10章 对象和类

第10章 对象和类 10.1 过程性编程和面相对象编程10.2 抽象和类10.2.1 类型是什么10.2.2 C中的类10.2.3 实现类成员函数10.2.4 使用类 10.1 过程性编程和面相对象编程 采用OOP方法时&#xff0c;首先从用户的角度考虑对象——描述对象所需的数据以及描述用户与数据交互所需的操…