OpenCV从入门到放弃(四):HighGui组件细讲
来源:互联网 发布:康耐视视觉检测软件 编辑:程序博客网 时间:2024/05/16 15:20
一.基本操作
Ⅰ.窗口创建和销毁
把窗口创建放在最前面讲是因为窗口创建应该是最基础最基础的了。而且窗口创建会让很多人搞晕,没错,这么简单的地方能够让很多人搞晕。更多的应该是因为不熟悉。
一般来说,在前面的一些简单例子中,我们并没有用到创建窗口这个函数,因为imshow()就会创建窗口了(也许你现在也不知道imshow()到底是什么东西,后面马上就会讲到)
我习惯于创建窗口之后然后进行显示,因为这样能够更加清楚一个程序中各个部件的构成。
http://docs.opencv.org/3.1.0/d7/dfc/group__highgui.html#ga851ccdd6961022d1d5b4c4f255dbab34
有关的函数:
创建窗口(namedWindow()):
作用:创建一个窗口作为图像或者轨迹条的”安置处”,(要是已经有一个同名的窗口,那么这个函数什么也不做)
原型void cv::namedWindow ( const String & winname, int flags = WINDOW_AUTOSIZE ) winname:窗口名,你自己指定.且以后这个名字就和这个窗口联系起来了! Flags:窗口类型,有WINDOW_NORMAL(用户能够改变窗口大小),WINDOW_AUTOSIZE(窗口适应显示的图像),WINDOW_OPENGL(窗口支持openGL)
销毁窗口:
//销毁所有的window cv::destroyAllWindows ()//销毁某个window void cv::destroyWindow (const String & winname) Winname:待销毁的窗口名称
更多的,还有moveWindow(),resizeWindow(),setWindowproperty(),setWindowTitle()这些函数来改变窗口的一些性质,可以自己根据需要看文档来使用.
Ⅱ.图像载入,显示和输出
1.图像的载入:imread()函数
原型:Mat cv::imread ( const String & filename,int flags = IMREAD_COLOR ) Filename:就是图片完整的路径和文件名(当然在工作目录下面写个完整的文件名就行了) Flags:载入类型,指定的是加载图像的颜色的类型(自带默认值为1,所以常常很多时候调用的时候没有加上这个参数).注意!OpenCV2的flag和OpenCV3的flag不一样,我们这里以OpenCV3的为主!
这里是所有的flag(载入类型):
IMREAD_UNCHANGED:载入源图像,并添加alpha通道. (常用) IMREAD_GRAYSCALE:始终将图像转换为灰度图再返回(常用选项) IMREAD_COLOR:总是转换图像为3通道(BGR注意顺序)的彩色图像(常用选项) IMREAD_ANYDEPTH:如果设置了这个,且载入的图像深度为16位/32位,那么就返回相应深度的图像,否则, 转换为8位返回(常用) IMREAD_ANYCOLOR:如果设置了,那么就载入任意可能的颜色格式而不进行转换. (常用)IMREAD_LOAD_GDAL :If set, use the gdal driver for loading the image.IMREAD_REDUCED_GRAYSCALE_2:如果设置了这个,图像总是转换为单通道灰度图,且尺寸缩减为1/2 IMREAD_REDUCED_COLOR_2:图像总是转换为彩色3通道BGR且尺寸缩减为1/2. IMREAD_REDUCED_GRAYSCALE_4:同上,灰度,缩减为1/4 IMREAD_REDUCED_COLOR_4 :同上,彩色,缩减为1/4 IMREAD_REDUCED_GRAYSCALE_8:同上,灰度,缩减为1/8 IMREAD_REDUCED_COLOR_8:同上,彩色,缩减为1/8
2.图像的显示:imshow()函数
原型:void cv::imshow ( const String & winname,InputArray mat) Winname:待安放窗口名称,没有这个名字的话,自己会创建一个 Mat:需要显示的Mat类型(一般我们把InputArray类型当做Mat类型)
如果窗口是用的CV_WINDOW_AUTOSIZE(默认值)标志创建的,那么显示图像原始大小.否则,将图像缩放以适合窗口.
Imshow缩放图像,取决于图像的深度.
要是载入的图像是8位无符号类型,那么就显示图像本来的样子,如果图像是16位无符号类型或者32位整形,使用像素值除以256.也就是说,值得范围从[0,255*256]映射到[0,255],要是图像是32位浮点型,那么像素便要乘以255.值得范围从[0,1]映射到[0,255]
3.输出图像到文件:imwrite()函数
原型:bool cv::imwrite (const String & filename,InputArray img,const std::vector< int > & params = std::vector< int >() ) Filename:需要写入的完整文件名,且必须带扩展名,因为要根据扩展名来指定图片格式 Img:一般填一个Mat类型的图像数据 Const vector<int>& 类型的参数params:表示为特定格式保存的参数编码,一般取默认就行,更加详细的介绍看官方文档:
http://docs.opencv.org/3.1.0/d4/da8/group__imgcodecs.html#gga61d9b0126a3e57d9277ac48327799c80af660544735200cbe942eea09232eb822
读写显示综合实例:
代码:
#include <iostream>#include <opencv2/core.hpp>#include <opencv2/highgui.hpp>int main(){ //创建4个窗口 cv::namedWindow("win1"); cv::namedWindow("win2"); cv::namedWindow("win3"); cv::namedWindow("win4"); cv::namedWindow("win5"); //以IMREAD_UNCHANGED模式读取图片 cv::Mat pic1 = cv::imread("1.jpg", cv::IMREAD_UNCHANGED); cv::imshow("win1", pic1); //以IMREAD_GRAYSCALE模式读取图片 cv::Mat pic2 = cv::imread("1.jpg", cv::IMREAD_GRAYSCALE); cv::imshow("win2", pic2); //以IMREAD_COLOR模式读取图片 cv::Mat pic3 = cv::imread("1.jpg", cv::IMREAD_COLOR); cv::imshow("win3", pic3); //以IMREAD_ANYDEPTH模式读取图片 cv::Mat pic4 = cv::imread("1.jpg", cv::IMREAD_ANYDEPTH); cv::imshow("win4", pic4); //以IMREAD_ANYDEPTH模式读取图片 cv::Mat pic5 = cv::imread("1.jpg", cv::IMREAD_REDUCED_COLOR_8); cv::imshow("win5", pic5); //写入图片pic4,实际上,我们一般只带两个参数就够了 //生成两种不同的格式 cv::imwrite("newpic.jpg", pic4); cv::imwrite("newpic2.png", pic4); cv::waitKey(0); return 0;}
结果:
文件夹下面也生成了两个文件!
- OpenCV从入门到放弃(四):HighGui组件细讲
- OpenCV从入门到放弃(三):Core组件细讲
- Python从入门到放弃(四):函数细讲
- Python从入门到放弃(四):函数细讲
- OpenCV从入门到放弃(五):像素!
- opencv环境配置 从入门到放弃.....
- JavaScript从入门到放弃(四)
- OpenCV从入门到放弃(二):架构和上手
- OpenCV从入门到放弃(七):直方图那些事儿
- 《Opencv从入门到放弃》-- 1th 显示图像
- 《OpenCV从入门到放弃》 -- 2th 图像二值化
- OpenCV从入门到放弃:摸鱼笔记(一)
- vue从入门到放弃--- 父子组件通信
- docker从入门到放弃(四)-创建sprin…
- Swift3.0从入门到放弃(四)-基础最终篇
- Unity3D 从入门到放弃(四)----打飞碟
- 微信小程序从入门到放弃(四)
- Freemarker 从入门到放弃
- 利用VS编写并调用动态链接库
- Linux shell 脚本的入门指南
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- C#Color颜色对照表
- 自定义控件三部曲之绘图篇(十六)——给控件添加阴影效果与发光效果
- OpenCV从入门到放弃(四):HighGui组件细讲
- Android平台遥控器按键映射流程
- 欢迎使用CSDN-markdown编辑器
- Mac OS X 系统12个常用的文本编辑快捷键(移动、选中)
- 莫斯科大学数学力学系 数学部专门化课程目录
- Using dispatch groups to wait for multiple web services
- MongoDB下载和安装
- LINUX 驱动学习 -设备模型之别人的理解(2)
- MyBatis_3.4.0学习系列(一)