OpenCV 学习笔记

  • day1-图像读取显示
  • 函数:
  • imread() 读取图像
  • namedWindow() 创建新的窗口
  • waitkey() 等待键入
  • 代码:

day1-图像读取显示

用OpenCV开发模块,打开主机目录中的一张图片,
 并显示在桌面上

函数:

highug模块中的imread,imshow,namedWindow,imwrite函数

imread() 读取图像

Mat imread(const string& filename, int flags=1)

参数

说明

filename

读取文件的地址文件名

flags

读取图像的颜色类别(flags=1:(默认参数)表示返回3通道图像;CV_LOAD_IMAGE_ANYEPTH:返回16bit或32bit图像(当输入相同深度时),否则返回8bit图像;CV_LOAD_IMAGE_COLOR:返回单色图像;CV_LOAD_IMAGE_GRAYSCALE:返回为通道图像;0:返回为单通道图像;<0:不对图像进行通道转换;>0:强制转换为3通道图像。

例1

//图像读取
Mat scr = imread("D:\\学习\\OpenCV学习\\pictures\\image\\1.jpg");
  1. imshow() 在指定的窗口显示一幅图像
    void imshow(const String& winname, InputArray mat);

参数

说明

winname

const string&类型的winname,指需要显示的窗口标识名称

mat

InputArray类型的mat,指需要显示的图像

notes:imshow() 1,只支持8位和浮点数显示 RGB颜色空间;
2, RGB颜色空间:B G R 三个通道 三色组合 255255255 还有透明通道

例2

imshow("窗口1",scr);//在创建的窗口1显示

namedWindow() 创建新的窗口

void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);

参数

说明

winname

const String& 的 winname,用做窗口标识符的窗口名称

flags

窗口的标识,一般默认为WINDOW_AUTOSIZE 通过显示的图像约束窗口的大小

notes:

CV_WINDOW_NORMAL 将窗口更改为正常大小或使窗口可调整大小。.
CV_WINDOW_AUTOSIZE 通过显示的图像约束窗口的大小。该窗口不可调整大小。.
CV_WINDOW_FULLSCREEN 将窗口更改为全屏.
CV_WINDOW_FREERATIO 使窗口在没有比率约束的情况下可调整大小.
CV_WINDOW_KEEPRATIO 使窗口可调整大小,但保留所显示图像的比例

例3

namedWindow("窗口1", WINDOW_NORMAL);//创建 WINDOW_FREERATIO窗口

waitkey() 等待键入

int waitKey(int delay = 0);
waitKey函数的功能是不断刷新图像,频率时间为delay,单位为ms,返回值为当前键盘按下的值,没有按键时返回-1

例4

waitKey(0);//无限循环
while(1){ if(waitKey(100)==27)break; }
//在这个程序中,告诉OpenCv等待用户触发事件,
//等待时间为100ms,如果在这个时间段内, 用户按下ESC(ASCII码为27),则跳出循环,否则,则跳出循环

代码:

QuickDemo.cpp

#include <iostream>
#include <opencv2\highgui.hpp>
#include <opencv2\imgproc.hpp>

using namespace cv;
using namespace std;

int main()
{
	Mat scr = imread("D:\\学习\\OpenCV学习\\pictures\\image\\1.jpg");//打开一张图
	if (!scr.data == 1)//判空
		return -1;
	namedWindow("窗口1", WINDOW_FREERATIO);//创建 WINDOW_FREERATIO窗口
	imshow("窗口1",scr);//在创建的窗口显示
	waitKey(0);//延时 0->一直延时 1->延时1ms
	return 0;
}

notes:
判空的条件(如上完整代码所示):

1,scr.empty();//判断是否为窗体,if未加载成功则是空白,print: could not laod image;
 2,scr.data;//if(!scr.data)==1 未读取成功