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

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的使用示例和用法总结,记录一下还是新手的自己,大佬请跳过!

猜你喜欢

转载自blog.csdn.net/m0_43458204/article/details/131052648