02_Opencv加载、修改、保存图片

02_Opencv加载、修改、保存图片

一.使用cv::imread函数加载图像

imread:通过文件的方式加载图像,其中第一个参数为待加载图像文件的路径,第二个参数表示加载的图像类型,常见的取值如下:

  • IMREAD_UNCHANGED(<0):加载原图,不做任何改变
  • IMREAD_GRAYSCALE(=0):把原图作为灰度图像加载
  • IMREAD_COLOR(>0):把原图作为RGB图像加载

二.使用cv::namedWindow函数与cv::imshow函数显示图像

  • namedWindow:创建一个opencv窗口,它是由opencv自动创建与释放,不需要手动释放它
  • 常见用法:namedWindow(“window title”, CV_WINDOW_AUTOSIZE);
  • CV_WINDOW_AUTOSIZE:会自动根据图像大小,调整窗口大小,不能人为的改变窗口大小
  • CV_WINDOW_NORMAL:与QT集成时使用,允许修改窗口大小
  • imshow:根据窗口名称显示图像到指定的窗口,第一个参数是窗口名称(与namedWindow的第一个参数对应),第二个参数是带显示图像的Mat对象

三.使用cv::cvtColor函数修改图像

cvtColor:把图像从一个色彩空间转换到另一个色彩空间,第一个参数表示源图像的Mat对象,第二个参数表示转换了色彩空间的图像的Mat对象,第三个参数表示源图像和目标图像的色彩空间,如:COLOR_BGR2HLS,COLOR_BGR2GRAY等

四.使用cv::imwrite函数保存图像

  • 只有8位、16位的PNG、JPG、Tiff文件格式,并且是单通道或者三通道的BGR的图像才可以通过这种方式保存
  • 保存PNG格式的图像时,可以保存具有透明通道的图片
  • 可以指定压缩参数
  • 第一个参数为文件保存路径,第二个参数为待保存的图像的Mat对象

五.示例

    Mat src = imread("/Users/zhixingao/Downloads/android/OpencvForCPlus/素材/莱娜.png");
    if(src.empty()) {
        printf("could read image...\n");
        return -1;
    }
    namedWindow("source image", CV_WINDOW_AUTOSIZE);
    imshow("source image", src);
    
    Mat dst;
    cvtColor(src, dst, COLOR_BGR2GRAY);
    
    namedWindow("output image", CV_WINDOW_AUTOSIZE);
    imshow("output image", dst);
    
    imwrite("/Users/zhixingao/Downloads/android/OpencvForCPlus/素材/processor/莱娜灰度.png", dst);
    
    waitKey(0);
    
    return 0;

六.结果

02_Opencv加载、修改、保存图片
02_Opencv加载、修改、保存图片