一、相关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;
}
三、实现结果