• OpenCV图像处理学习一,加载显示修改保存图像相关函数


    一.OpenCV加载图像(用cv::imread

    Mat cv::imread(const String & filename, int flags = IMREAD_COLOR);

    参数 filename:指定希望读取图像的路径,可以为相对路径和绝对路径
    参数 flags:指定读取图像的格式。该值枚举自 cv::ImreadModes,默认值为1。

    imread函数功能是加载图像文件成为一个Mat对象

     第一个参数表示图像文件的路径名

     第二个参数,表示加载的图像是什么类型,支持常见的三个参数值

    IMREAD_UNCHANGED (<0) 表示加载原图,不做任何改变

    IMREAD_GRAYSCALE ( 0)表示把原图作为灰度图像加载进来

    IMREAD_COLOR (>0) 表示把原图作为RGB图像加载进来

    注意:OpenCV支持JPGPNGTIFF等常见格式图像文件加载,如果图像不能被读取(因为文件丢失、权限不当、不支持或无效格式),函数返回一个空矩阵(Mat::data==NULL)


    imread函数第二个参数,图像格式如下:
    枚举类型    枚举值    类型描述
    IMREAD_UNCHANGED    -1    将加载的图像按原样返回,包括alpha通道。会忽略EXIF方向
    IMREAD_GRAYSCALE    0    编解码器内部将图像转换为单通道灰度图像返回
    IMREAD_COLOR    1    将图像转换为RGB通道排列的彩色图像,该值是函数的默认值
    IMREAD_ANYDEPTH    2    如果图像具有深度,则返回对应的16/32位图像。否则转换为8位返回
    IMREAD_ANYCOLOR    4    图像以任何可能的颜色读取
    IMREAD_LOAD_GDAL    8    使用gdal驱动程序加载图像
    IMREAD_REDUCED_GRAYSCALE_2    16    将图像转换为单通道的灰度图像,图像的尺寸缩小为1/2
    IMREAD_REDUCED_COLOR_2    17    将图像转换为RGB通道排列的彩色图像,图像尺寸缩小为1/2
    IMREAD_REDUCED_GRAYSCALE_4    32    将图像转换为单通道的灰度图像,图像的尺寸缩小为1/4
    IMREAD_REDUCED_COLOR_4    33    将图像转换为RGB通道排列的彩色图像,图像尺寸缩小为1/4
    IMREAD_REDUCED_GRAYSCALE_8    64    将图像转换为单通道的灰度图像,图像的尺寸缩小为1/8
    IMREAD_REDUCED_COLOR_8    65    将图像转换为RGB通道排列的彩色图像,图像尺寸缩小为1/8
    IMREAD_IGNORE_ORIENTATION    128    不要根据EXIF的方向标志旋转图像

    二.OpenCV显示图像 (cv::namedWindos cv::imshow)

    cv::namedWindos函数

    namedWindow(const String & winname, InputArray mat);

    参数 winname:指定显示窗体的名称,为String类型

    参数 mat:显示图像的Mat对象,为InputArray类型

    namedWindos功能是创建一个OpenCV窗口,由OpenCV自动创建与释放,无需考虑获取内存与取销毁它

    WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小

    WINDOW_NORMAL跟QT集成的时候会使用,允许修改窗口大小。

    cv::imshow函数

     void cv::imshow	(const String & winname,InputArray mat);

    imshow根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二参数是Mat对象

    函数imshow在指定的窗口中显示图像。如果窗口是用cv::WINDOW_AUTOSIZE标志创建的,图像将以原始大小显示,但是它仍然受到屏幕分辨率的限制。否则,图像将被缩放以适应窗口。函数可以根据图像的深度对图像进行缩放;

    如果图像为8位无符号图像,则显示为原样。
    如果图像为16位无符号或32位整数,则像素除以256,将取值范围[0,255*256]映射为[0,255]
    如果图像为32位或64位浮点数时,则像素值乘以256,将取值范围[0,1]映射为[0,255]
    如果创建的窗口支持OpenGL, cv::imshow也支持ogl::Buffer, ogl::Texture2Dcuda::GpuMat作为输入
    如果在此函数之前没有创建窗口,则假定它创建了一个带有cv::WINDOW_AUTOSIZE的窗口
    如果你需要显示一个比屏幕分辨率大的图像,你需要在imshow之前调用
    namedWindow("", WINDOW_NORMAL)

    三.修改图像 (cv::cvtColor)

    void cv::cvtColor (InputArray src,OutputArray dst,int code,int dstCn = 0 ) 	
    

    cvtColor的功能是把图像从一个彩色空间转换到另外一个色彩空间,有三个参数

    第一个参数src: 表示输入图像

    第二参数dst: 表示色彩空间转换之后的图像

    第三个参数code: 表示图像转码的方式,如:COLOR_BGR2HLS COLOR_BGR2GRAY

    第四个参数dstCn:表示通道数量的目标图像;如果该参数为0时,信道数代码和从SRC中自动得到

    ———————————————————————————————————————————

    图像转码的方式

    RGB和BGR(opencv默认的彩色图像的颜色空间是BGR)颜色空间的转换
    cv::COLOR_BGR2RGB
    cv::COLOR_RGB2BGR
    cv::COLOR_RGBA2BGRA
    cv::COLOR_BGRA2RGBA


    向RGB和BGR图像中增添alpha通道
    cv::COLOR_RGB2RGBA
    cv::COLOR_BGR2BGRA


    从RGB和BGR图像中去除alpha通道
    cv::COLOR_RGBA2RGB
    cv::COLOR_BGRA2BGR


    从RBG和BGR颜色空间转换到灰度空间
    cv::COLOR_RGB2GRAY
    cv::COLOR_BGR2GRAY
    cv::COLOR_RGBA2GRAY
    cv::COLOR_BGRA2GRAY


    从灰度空间转换到RGB和BGR颜色空间
    cv::COLOR_GRAY2RGB
    cv::COLOR_GRAY2BGR
    cv::COLOR_GRAY2RGBA
    cv::COLOR_GRAY2BGRA


    RGB和BGR颜色空间与BGR565颜色空间之间的转换
    cv::COLOR_RGB2BGR565
    cv::COLOR_BGR2BGR565
    cv::COLOR_BGR5652RGB
    cv::COLOR_BGR5652BGR
    cv::COLOR_RGBA2BGR565
    cv::COLOR_BGRA2BGR565
    cv::COLOR_BGR5652RGBA
    cv::COLOR_BGR5652BGRA


    灰度空间域BGR565之间的转换
    cv::COLOR_GRAY2BGR555
    cv::COLOR_BGR5552GRAY


    8RGB和BGR颜色空间与CIE XYZ之间的转换
    cv::COLOR_RGB2XYZ
    cv::COLOR_BGR2XYZ
    cv::COLOR_XYZ2RGB
    cv::COLOR_XYZ2BGR


    RGB和BGR颜色空间与uma色度(YCrCb空间)之间的转换
    cv::COLOR_RGB2YCrCb
    cv::COLOR_BGR2YCrCb
    cv::COLOR_YCrCb2RGB
    cv::COLOR_YCrCb2BGR


    1RGB和BGR颜色空间与HSV颜色空间之间的相互转换
    cv::COLOR_RGB2HSV
    cv::COLOR_BGR2HSV
    cv::COLOR_HSV2RGB
    cv::COLOR_HSV2BGR


    RGB和BGR颜色空间与HLS颜色空间之间的相互转换
    cv::COLOR_RGB2HLS
    cv::COLOR_BGR2HLS
    cv::COLOR_HLS2RGB
    cv::COLOR_HLS2BGR


    RGB和BGR颜色空间与CIE Lab颜色空间之间的相互转换
    cv::COLOR_RGB2Lab
    cv::COLOR_BGR2Lab
    cv::COLOR_Lab2RGB
    cv::COLOR_Lab2BGR


    RGB和BGR颜色空间与CIE Luv颜色空间之间的相互转换
    cv::COLOR_RGB2Luv
    cv::COLOR_BGR2Luv
    cv::COLOR_Luv2RGB
    cv::COLOR_Luv2BGR


    Bayer格式(raw data)向RGB或BGR颜色空间的转换
    cv::COLOR_BayerBG2RGB
    cv::COLOR_BayerGB2RGB
    cv::COLOR_BayerRG2RGB
    cv::COLOR_BayerGR2RGB
    cv::COLOR_BayerBG2BGR
    cv::COLOR_BayerGB2BGR
    cv::COLOR_BayerRG2BGR
    cv::COLOR_BayerGR2BGR

    ———————————————————————————————————————————

    四.保存图像(cv::imwrite)

    1. bool cv::imwrite (const String & filename,
    2. InputArray img,
    3. const std::vector< int > & params = std::vector< int >());

    参数 filename:指示文件的名称,包含后缀。写入图像支持的格式与读入支持的格式一致
    参数 img:需要保存的图像或图像数组(vector)
    参数 params:特定于图像保存格式的参数编码对,参数类型为int 构成的vector,其值枚举自 cv::ImwriteFlags

    函数imwrite将img所指代的图像保存到指定的文件中(filename),图像格式是根据文件名扩展名选择的。一般情况下,使用该函数只能保存8位单通道或3通道(通道顺序为BGR)的图像,但有以下几种例外情况:

    CV_16U :图片保存格式为 PNG, JPEG 2000 和 TIFF 格式
    CV_32F : 图片保存为 PFM, TIFF, OpenEXR, 和 Radiance HDR 格式
    CV_32FC3: TIFF图像将使用LogLuv高动态范围编码(每像素4字节)保存
    带有alpha通道的PNG图像可以使用此函数保存。为此,创建8位(或16位)4通道的BGRA图像, alpha通道位于最后。完全透明像素的alpha值应该设置为0,完全不透明像素的alpha值应该设置为255/65535

    代码示例

    1. include "stdafx.h"
    2. #include
    3. #include
    4. #include
    5. using namespace cv;
    6. int main(int argc, char **argv)
    7. {
    8. Mat src = imread("F:/photo/a.jpg", -1);
    9. if (src.empty()) //判断是否读写成功
    10. {
    11. printf("could not load image....\n");
    12. return -1;
    13. }
    14. namedWindow("input image", WINDOW_AUTOSIZE);
    15. imshow("input image", src);
    16. }

    代码效果

     ——————————————————————————————————————————

    代码示例

    1. #include "stdafx.h"
    2. #include
    3. #include
    4. #include
    5. using namespace cv;
    6. int main(int argc, char **argv)
    7. {
    8. Mat src = imread("F:/photo/a.jpg", -1);
    9. if (src.empty())
    10. {
    11. printf("could not load image....\n");
    12. return -1;
    13. }
    14. namedWindow("input image", WINDOW_AUTOSIZE);
    15. imshow("input image", src);
    16. Mat cet;
    17. cvtColor(src, cet, COLOR_BGR2GRAY, 0);
    18. imshow("input image", cet);
    19. }

    图像效果

     

  • 相关阅读:
    vue3 elementPlus 表格实现行列拖拽及列检索功能
    Navicat Premium连接Django项目的数据库
    ES6 Generator 函数
    判断文件是否为DICOM文件
    SpringCloud (三) ——Nacos注册中心
    二阶段目标检测介绍
    C++ 多线程学习12 线程池
    【漏洞复现】金和OA FileUploadMessage 文件读取
    git学习
    3.NVIDIA Deepstream开发指南中文版--Deepstream 环境配置
  • 原文地址:https://blog.csdn.net/weixin_44651073/article/details/125812618