Opencv开发笔记二:图片的显示和保存

一、相关API介绍:

图片显示用到的API

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

param1 : 窗口的名字

param2: flag=IMREAD_COLOR  定义在下面的结构体下

enum ImreadModes {
       IMREAD_UNCHANGED  = -1,  //按原样返回加载的图像
       IMREAD_GRAYSCALE  = 0,  // 单通道灰色图像
       IMREAD_COLOR      = 1,  //3通道BGR彩色图像
       IMREAD_ANYDEPTH   = 2,  //当输入具有相应深度时,返回16位/32位图像,否则将其转换为8位。
       IMREAD_ANYCOLOR   = 4,  //任何形式读取
       IMREAD_LOAD_GDAL  = 8   // gdal driver加载图像
     };

使用函数imshow() 显示图像。窗口会自动调整为图像大小。第一个参数是窗口的名字,其次才是我们的图像。你可以创建多个窗口,不同的窗口用不同的名字区分。

 

图片的保存用到的API为imwrite,其函数原型为

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

param1:保存图像文件名,同时也确定了保存位置

param2:输入要保存的图像src

ret:true :写入成功 false:写入失败

waitKey() 是一个键盘绑定函数。需要指出的是它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。如果没有键盘输入,返回值为 -1,如果我们设置这个函数的参数为 0,那它将会无限期的等待键盘输入。

二、实验程序

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char **argv){
	Mat src, dst;  //定义一个存放图片数据的数组
	src = imread("./1.png", 0); // Loads a multi-page image from a file convert to gray
	if (src.empty())  // 判断图片是否存放在src中
	{
		cout << "can not read an image" << endl;
		return -1;
	}

	bool write_bool = imwrite("gray.png", src);
	if (write_bool){
		// 写入成功
		cout << "正常写入gray.png图片,保存到当前目录...." << endl;
	}

	namedWindow("input image", CV_WINDOW_AUTOSIZE); // 给窗口命名: 1 窗口名称 2 窗口显示方式
	imshow("input image", src); // cv库下的imshow方法,来显示图片:1 窗口名称 2 src

	waitKey(0); // 一直显示图片,直到检测到按键按下停止显示:waitKey(int delay = 0) delay延时的时间

	return 0;
}

 进一步将实验结果封装成API

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

bool saveImage(Mat &src){
	bool write_bool = imwrite("gray1.png", src);
	if (write_bool){
		// 写入成功
		cout << "正常写入gray.png图片,保存到当前目录...." << endl;
	}
	else{
		cout << "写入失败" << endl;
	}
	return true;
}

int main(int argc, char **argv){
	Mat src, dst;  //定义一个存放图片数据的数组
	src = imread("./1.png", 0); // Loads a multi-page image from a file convert to gray
	if (src.empty())  // 判断图片是否存放在src中
	{
		cout << "can not read an image" << endl;
		return -1;
	}

	saveImage(src);

	namedWindow("input image", CV_WINDOW_AUTOSIZE); // 给窗口命名: 1 窗口名称 2 窗口显示方式
	imshow("input image", src); // cv库下的imshow方法,来显示图片:1 窗口名称 2 src

	waitKey(0); // 一直显示图片,直到检测到按键按下停止显示:waitKey(int delay = 0) delay延时的时间

	return 0;
}

三、实现结果

 

©️2020 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值