1|图像入门
1.1、imread()读取图像
Mat imread( const String& filename, int flags = IMREAD_COLOR );
第一个参数为图像路径
第二个参数可以为1,0,-1,分别表示彩色模式、灰度模式、加载图像包括alpha通道
1.2、imshow()显示图像
void imshow(const String& winname, const ogl::Texture2D& tex);
窗口自动适合图像尺寸。
第一个参数是窗口名称,它是一个字符串。第二个参数是我们的对象。你可以根据需要创建任意多个窗口,但可以使用不同的窗口名称。
1.3、waitKey()键盘绑定函数
int waitKey(int delay = 0);
参数是以毫秒为单位的时间。该函数等待任何键盘事件指定的毫秒。如果您在这段时间内按下任何键,程序将继续运行。如果0被传递,它将无限期地等待一次敲击键。
通常和destroyAllWindows()配合使用
1.4、destroyAllWindows()破坏创建的所有窗口
destroyAllWindows()只会破坏我们创建的所有窗口。
如果要销毁任何特定的窗口,请使用函数 destroyWindow()在其中传递确切的窗口名称作为参数。
1.5、namedWindow()创建一个空窗口
void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
然后再将图像加载到该窗口
- 在这种情况下,你可以指定窗口是否可调整大小。这是通过功能cv.namedWindow()完成的。
- 默认情况下,该标志为cv.WINDOW_AUTOSIZE。但是,如果将标志指定为cv.WINDOW_NORMAL,则可以调整窗口大小。
1.6、imwrite()保存图像
bool imwrite( const String& filename, InputArray img,
const std::vector<int>& params = std::vector<int>());
第一个参数是文件名,第二个参数是要保存的图像。
1.7、例子
#include <QCoreApplication>
#include "opencv2/opencv.hpp"
#include <QDebug>
#include <QString>
using namespace cv;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
/**
* @brief 加载图像imread
* 第二个参数可以为1,0,-1,分别表示彩色模式、灰度模式、加载图像包括alpha通道
*/
Mat src = imread("./../../images/book.bmp",0);
/**
* @brief namedWindow创建一个空窗口,然后再将图像加载到该窗口
* 在这种情况下,你可以指定窗口是否可调整大小。这是通过功能**cv.namedWindow**()完成的。
* 默认情况下,该标志为**cv.WINDOW_AUTOSIZE**。但是,如果将标志指定为**cv.WINDOW_NORMAL**,则可以调整窗口大小。
*/
namedWindow("img");
// namedWindow("img",WINDOW_NORMAL);
/**
* @brief imshow显示图像
* 1.窗口自动适合图像尺寸。
2.第一个参数是窗口名称,它是一个字符串。第二个参数是我们的对象。你可以根据需要创建任意多个窗口,但可以使用不同的窗口名称。
*/
imshow("img",src);
/**
* @brief imwrite保存图像
* 第一个参数是文件名,第二个参数是要保存的图像
*/
// imwrite("./../../images/new1.bmp",src);
//按s保存图像并退出,或者按ESC键直接退出而不保存。
char k = waitKey(0);
if(k == 27){
destroyAllWindows();
}else if(k == 's') {
imwrite("./../../images/new1.bmp",src);
destroyAllWindows();
}
/**
* @brief waitKey键盘绑定函数。其参数是以毫秒为单位的时间
*该函数等待任何键盘事件指定的毫秒。如果您在这段时间内按下任何键,程序将继续运行。如果**0**被传递,它将无限期地等待一次敲击键。
*/
// waitKey(0);
/**
* @brief destroyAllWindows破坏我们创建的所有窗口。
* 如果要销毁任何特定的窗口,请使用函数 cv.destroyWindow()在其中传递确切的窗口名称作为参数。
*/
// destroyAllWindows();
return a.exec();
}