zoukankan      html  css  js  c++  java
  • OpenCV4学习笔记(3.0)官方教程 | Load, Modify, and Save an Image 加载、修改和保存图像

    阅读这篇博客之前,需要先掌握a如何使用cv::imread来读取图像和使用cv::imshow来显示图像,这些内容在上一篇博客中都有提到。

    目标

    1. 使用cv::imread方法加载图像。
    2. 使用cv::cvtColor方法将BGR色彩空间的图像转化为灰度图像。
    3. 使用cv::imwrite方法将转换后的图像保存到本地磁盘中。

    源代码

    #include <opencv2/opencv.hpp>
    using namespace cv;
    int main( int argc, char** argv )
    {
    	char* imageName = argv[1];
     	Mat image;
     	image = imread( imageName, IMREAD_COLOR );
     	if( argc != 2 || !image.data )
     	{
       		printf( " No image data 
     " );
       		return -1;
     	}
     	Mat gray_image;
     	cvtColor( image, gray_image, COLOR_BGR2GRAY );
     	imwrite( "../../images/Gray_Image.jpg", gray_image );
     	namedWindow( imageName, WINDOW_AUTOSIZE );
     	namedWindow( "Gray image", WINDOW_AUTOSIZE );
     	imshow( imageName, image );
     	imshow( "Gray image", gray_image );
     	waitKey(0);
     	return 0;
    }
    

    解释

    先使用cv::imread方法加载图像,imageName存储的是从控制台输入的图像路径,在这个例子中,假设输入的图像的色彩空间为BGR。


    将图像从BGR色彩空间转换到灰度格式,可以直接使用OpenCV提供的API方法来完成这个转换操作。

    cvtColor( image, gray_image, COLOR_BGR2GRAY );
    

    这个函数有三个参数:

    • image是一个Mat对象,作为输入图像/原始图像(src)
    • gray_image也是一个Mat对象,用来存储转换之后的灰度图像(dst)。
    • 最后一个参数指定了转换发生在哪两种色彩空间之间,按照目标的要求,这里需要设置为COLOR_BGR2GRAY(使用cv::imread读取彩色图像时,BGR为默认通道顺序)。

    因为这里使用了opencv2/opencv.hpp所以看不出来,cv::cvtColor方法属于opencv2/imgproc.hpp头文件,如果还是使用上一次的头文件这里会报错,提示找不到方法。

    最后一个参数自OpenCV 4.0.0以来就由CV_BGR2GRAY改为了COLOR_BGR2GRAY。


    我们现在有了一张新的灰度图像,如果关闭程序,内存将自动释放,这张灰度图像也会随之丢失,所以需要使用一个与cv::imread相似的方法——cv::imwrite方法,用来将灰度图像存储到本地磁盘中。

    imwrite(“ ../../images/Gray_Image.jpg”,gray_image);
    

    这句话能够将灰度图像保存在当前目录的二级父目录下的images文件夹中,文件名为Gray_Image.jpg。


    最后我们需要看看图像是否被正确的转换了,创建两个窗口来显示原始图像和新图像。

    namedWindow( imageName, WINDOW_AUTOSIZE );
    namedWindow( "Gray image", WINDOW_AUTOSIZE );
    
    imshow( imageName, image );
    imshow( "Gray image", gray_image );
    

    最后使用waitKey方法,让程序永久等待直到任一按键被按下。

    结果

    实现功能非常简单,不做演示了。

    • 运行程序时,显示了一张彩色图像和一张灰度图像。
    • 在对应的文件路径下,得到了存储的灰度图像。

    END

  • 相关阅读:
    NX二次开发-获得制图中对象的坐标点UF_DRF_ask_origin
    string的find("")
    NX二次开发-设置尺寸的附加尺寸UF_DRF_set_appended_text
    NX二次开发-获取尺寸的附加文本UF_DRF_ask_appended_text
    NX二次开发-更改图纸尺寸内容(编辑文本)uc5566
    NX二次开发-获取工程图尺寸的值UF_DRF_ask_dim_info
    MFC进度条
    NX二次开发-对话框解锁UF_UI_unlock_ug_access
    NX二次开发-对话框加锁UF_UI_lock_ug_access
    <转载>深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别
  • 原文地址:https://www.cnblogs.com/LYT-Dveloper/p/13523050.html
Copyright © 2011-2022 走看看