程序如下

#include "opencv2/opencv.hpp"
using namespace cv; int main()
{
Mat file1 = imread("girl.jpg",CV_LOAD_IMAGE_UNCHANGED);
Mat file2 = imread("girl.jpg", CV_LOAD_IMAGE_GRAYSCALE); namedWindow("Color", CV_WINDOW_FREERATIO);
namedWindow("Fixed", CV_WINDOW_AUTOSIZE); imshow("Color", file1);
imshow("Fixed", file2); resizeWindow("Color", file1.cols / 2, file1.rows / 2);
resizeWindow("Fixed", file2.cols / 2, file2.rows / 2); moveWindow("Color", 600, 400);
moveWindow("Fixed", 600 + file1.cols + 5, 400); waitKey(0);
}

运行结果如下:

图片中的这把尺是测量图片像素的,不是图片本身。

1. imread函数,读取图片

函数原型:

Mat imread(const String& filename, int flag = CV_LOAD_IMAGE_COLOR)

参数说明:

  1. filename: 待打开图片的文件名,支持常见的图片格式
  2. flag: 这里只简单说明例子中用到的二个参数
    • CV_LOAD_IMAGE_UNCHANGED: 不进行转化,以原有图片的格式读取
    • CV_LOAD_IMAGE_GRAYSCALE: 转化为灰度图,类型为CV_8UC1

通过调试器,我们可以看到本例中,file1 = {UINT8, 3 x 389 x 292},

file2 = {UINT8, 1 x 389 x 292}。这里选择file1作为说明,其中:

file1.cols = 389, 表示图片水平方向

file1.rows = 292, 表示图片的垂直方向

file1.channels = 3, 表示图片的通道数

2. namedWindow函数, 生成一个窗口

函数原型如下:

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

参数说明:

  1. winname: 窗口标识符,也就是窗口的名字,见图片中的 Color, Fixed 等
  2. flags: 窗口的类型
    • CV_WINDOW_FREERATIO, 窗口自适应图片大小,可以窗口用鼠标调整大小
    • CV_WINDOW_AUTOSIZE, 窗口自适应图片大小,但窗口不能通过鼠标调整大小

3. imshow函数,显示图片

函数原型:

void imshow(const String& winname, InputArray mat)

参数说明:

  1. winname: 显示窗口的名字
  2. mat: 待显示的图像

4. resizedWindow函数,调整窗口的大小

函数原型:

void resizeWindow(const String& winname, int width, int height)

参数说明:

  1. winname: 指定调整窗口的名字
  2. width: 新窗口的宽度
  3. height: 新窗口的高度

注意:对于namedWindow函数,选用 CV_WINDOW_AUTOSIZE 参数,如果width和height小于原图片,那么调整后的图片是不能全部显示图片。Fixed 和 Color 图中区别很明显。

4. moveWindow函数,移动窗口

函数原型:

void moveWindow(const String& winname, int x, int y)

函数说明:

  1. winname: 移动窗口的名字
  2. x: 窗口左边到屏幕左边的距离,单位为像素
  3. y: 窗口上边到屏幕上边的距离,单位为像素

本例中,Fixed 相对于 Color 右移了 file1.cols + 5 个像素,file1.cols = 389, 从图片中的标尺可以看到,正好 394 个像素。注意都是以窗口的左侧边框为基准。

opencv3 学习三 - 图像输入输出显示等的更多相关文章

  1. opencv3 学习四 - 图像减色

    程序如下 #include "opencv2/opencv.hpp" using namespace cv; int main() { // 灰度图 Mat original = ...

  2. 从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中

    //从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中 //作者:sandy //时间:2015-10-10 #inclu ...

  3. Struts2框架学习(三) 数据处理

    Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...

  4. Python学习 Part5:输入输出

    Python学习 Part5:输入输出 1. 格式化输出 三种输出值的方法: 表达式语句 print()函数 使用文件对象的write()方法 两种方式格式化输出: 由自己处理整个字符串,通过使用字符 ...

  5. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  6. [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点

    深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...

  7. day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  8. 深度学习与计算机视觉(12)_tensorflow实现基于深度学习的图像补全

    深度学习与计算机视觉(12)_tensorflow实现基于深度学习的图像补全 原文地址:Image Completion with Deep Learning in TensorFlow by Bra ...

  9. SCARA——OpenGL入门学习三

    OpenGL入门学习[三] 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处.例如:点太小,难以看清楚:直线也太细,不舒服:或者想画虚线,但不知道方法只能用 ...

随机推荐

  1. Ubuntu下安装CUDA

    cuda check: cuDNN 下载cuDNN后解压 更新软链接 更新链接库 symbol link 参考链接: http://docs.nvidia.com/cuda/cuda-installa ...

  2. Python初学者第一天 Python安装及第一个Python程序

    Python基础: 1day: 1.Python基础: A.编程语言介绍:     a. 计算机只能理解0和1.编程即写一段按照一定规则写代码,让计算机帮你干活:     b.机器语言:最底层的语言, ...

  3. 一个典型的后台软件系统的设计复盘——(三)打通任督二脉-context

    武侠小说练功讲究打通任督二脉.程序设计练到一定程度也讲究打通任督二脉.好奇心强的同学可以搜搜“打通任督二脉有什么感觉”. spring的任督二脉ApplicationContext 最经典的任督二脉莫 ...

  4. 高质量C++C编程指南笔记 标签: c++笔记 2015-11-22 20:59 179人阅读 评论(0) 收藏

    1.  在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少 CPU 跨切循环层的次数. 2.  如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面 ...

  5. 获取Excel的单元格数据类型(靠谱)

    VBA中,单元格属性有NumberFormat可以获取单元格格式,比如: G/通式格式→常规 @→文本 yyyy/m/d→日期 问题: G/通式格式,无法知道值是整数还是浮点数, yyyy/m/d如果 ...

  6. Spring 整合Hibernate 示例

    虽然Spring整合Hibernate早就会了,但经常在创建项目整合这两个框架的时候出一些低级错误.所以在这里写一个示例,以后再遇到错误时,再把遇到的错误或异常添加上. 一.创建一个动态WEB工程,添 ...

  7. C/C++心得-从内存开始

    因工作与自身各方面需要,开始重新学C,其实说重新也不太准,原来只是大学里面接触过,且还未得多少精髓就转其他开发,不过也正是因此才有了重新学习的必要,基础部分的心得将通过博文记录下来,对于初学者应该有些 ...

  8. PHP 判断常量,变量和函数是否存在

    判断变量是否被定义:defined() if (defined('CONST_NAME')) { //do something } 判断变量是否存在:isset() ,注意变量未声明或声明时赋值为NU ...

  9. php开发规范-psr系列规范

    转自:http://www.cnblogs.com/x3d/p/php-psr-standards.html PSR 是PHP Standard Recommendation的简写,它其实应该叫PSR ...

  10. mybatis全局配置文件

    一.properties:引入外部配置文件 1.resource :引入类路径下的全局配置文件,例如:<properties resource="conf/dbconfig.prope ...