.. _Load_Save_Image: 读取、修改、保存图像 ******************************* .. note:: 我们假设读者已经了解图像读取函数 :imread:`imread <>` ,并能使用 :imshow:`imshow <>` 将图像显示到窗口。 目标 ====== 如下,将学习如何使用: .. container:: enumeratevisibleitemswithsquare * 图像读取 :imread:`imread <>` * 图像颜色空间的转换 :cvt_color:`cvtColor <>` * 图像保存至硬盘 (using :imwrite:`imwrite <>`) 代码 ====== 代码如下: .. code-block:: cpp :linenos: #include #include using namespace cv; int main( int argc, char** argv ) { if(argc != 2) { printf("useage: %s \n ", argv[0]); return -1; } char* imageName = argv[1]; Mat image; image = imread( imageName, CV_LOAD_IMAGE_COLOR); if( !image.data ) { printf( " No image data \n " ); return -1; } Mat gray_image; cvtColor( image, gray_image, CV_BGR2GRAY ); imwrite( "../../images/Gray_Image.jpg", gray_image ); namedWindow( imageName, CV_WINDOW_AUTOSIZE ); namedWindow( "Gray image", CV_WINDOW_AUTOSIZE ); imshow( imageName, image ); imshow( "Gray image", gray_image ); waitKey(0); return 0; } 注解 ============ #. 首先: * 创建Mat,用于保存图像内容。 * 使用 :imread:`imread <>` 读取图像,图像路径为 *imageName* ,图像按BGR格式读取。 #. 其次,将RGB图像转化为灰度格式。Opencv中有现成的转化函数: .. code-block:: cpp cvtColor( image, gray_image, CV_BGR2GRAY ); :cvt_color:`cvtColor <>` 的参数为: .. container:: enumeratevisibleitemswithsquare * 源图像 (*image*) 。 * 目标图像 (*gray_image*),用于保存转换图像。 * 附加参数,用于指定转换的类型,例子中使用参数 **CV_BGR2GRAY** 。参数的具体定义请参见cvColor函数的API文档。 #. 然后,使用函数 :imwrite:`imwrite <>` 将得到的灰度图像 *gray_image* 保存到硬盘。程序结束时,该灰度图像将会被释放。 .. code-block:: cpp imwrite( "../../images/Gray_Image.jpg", gray_image ); 该函数,将图像写入到指定的文件夹下,程序执行时需保证该文件夹存在。示例中,将得到的灰度图像写到../../images/下,命名为Gray_Image.jpg。 #. 最后,为了检验图像是否正确,将原始图像和灰度图像分别显示到打开的窗口中: .. code-block:: cpp namedWindow( imageName, CV_WINDOW_AUTOSIZE ); namedWindow( "Gray image", CV_WINDOW_AUTOSIZE ); imshow( imageName, image ); imshow( "Gray image", gray_image ); #. 结尾的 *waitKey(0)* 函数,用于等待用户的按键操作来关闭窗口。 结语 ======= 程序运行后,将得到: .. image:: images/Load_Save_Image_Result_1.jpg :alt: Load Save Image Result 1 :align: center 检查你的输出文件夹,将发现一个新的.jpg文件。文件名为 *Gray_Image.jpg* : .. image:: images/Load_Save_Image_Result_2.jpg :alt: Load Save Image Result 2 :align: center 恭喜你,到这儿你已经完成了整个程序! 翻译 ============= imagerabit@OpenCV中文网站