一.简介

相当于在PS中,新建一个画布

cv::Mat 类和 lplimage / cvMat结构体都可以表示一张图像

二.构造函数创建图像

// 创建一个空矩阵
cv::Mat image1;// 创建一个6行6列的8位1通道的矩阵
cv::Mat image2(6, 6, CV_8UC1);// 创建一个7行7列的8位3通道的矩阵
cv::Mat image3(cv::Size(7, 7), CV_8UC3);    cv::Mat image4(8, 8, CV_32FC2, cv::Scalar(1, 3));
cv::Mat image4(10, 8, CV_8UC1, cv::Scalar(5));cv::Mat image5(cv::Size(9, 9), CV_8UC3, cv::Scalar(1, 2, 3));cv::Mat image6(image2);

三.create()创建图像

Mat m(2,2,CV_8UC3);
m.create(3,2,CV_8UC2);

五.单窗口显示多张图像

cv::resize()  //图像缩放

cv::showManyImages()  //显示多张图像

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>using namespace cv;void showManyImages(const std::vector<cv::Mat>& srcImages, cv::Size imgSize)
{int nNumImages = srcImages.size();cv::Size nSizeWindows;if(nNumImages > 12){std::cout << "Not more than 12 images!" << std::endl;return ;}// 根据图片序列数量来确定分割小窗口形态switch(nNumImages){case 1: nSizeWindows = cv::Size(1,1);break;case 2: nSizeWindows = cv::Size(2,1);break;case 3:case 4: nSizeWindows = cv::Size(2,2);break;case 5: case 6: nSizeWindows = cv::Size(3,2);break;case 7:case 8: nSizeWindows = cv::Size(4,2);break;case 9: nSizeWindows = cv::Size(3,3);break;default: nSizeWindows = cv::Size(4,3);break;}// 设置小图像尺寸 间隙 边界int nShowImageSize = 200;int nSplitLineSize = 15;int nAroundLineSize = 50;// 创建输出图像 图像大小根据输入源确定const int imagesHeight = nShowImageSize * nSizeWindows.width + nAroundLineSize + (nSizeWindows.width - 1) * nSplitLineSize;const int imagesWidth = nShowImageSize * nSizeWindows.height + nAroundLineSize + (nSizeWindows.height - 1) * nSplitLineSize;std::cout << imagesWidth << " " << imagesHeight <<std::endl;cv::Mat showWindowImages(imagesWidth, imagesHeight, CV_8UC3, cv::Scalar(0, 0, 0));//提取对应小图像的左上角坐标X Yint posX = (showWindowImages.cols - (nShowImageSize * nSizeWindows.width + (nSizeWindows.width - 1) * nSplitLineSize))/2;int posY = (showWindowImages.rows - (nShowImageSize * nSizeWindows.height + (nSizeWindows.height - 1) * nSplitLineSize)) / 2;std::cout << posX << " " << posY << std::endl;int tempPosX = posX;int tempPosY = posY;// 将每一小幅图像整合成大图像for (int i = 0; i < nNumImages; i++){// 小图像坐标转换if((i % nSizeWindows.width == 0) && (tempPosX != posX)){tempPosX = posX;tempPosY += (nSplitLineSize + nShowImageSize);}// 利用Rect区域将小图像置于大图像相应区域cv::Mat tempImage = showWindowImages(cv::Rect(tempPosX, tempPosY, nShowImageSize, nShowImageSize));//利用resize函数实现图像缩放resize(srcImages[i], tempImage, cv::Size(nShowImageSize, nShowImageSize));tempPosX += (nSplitLineSize + nShowImageSize);}cv::imshow("showWindowImages", showWindowImages);
}int main()
{// 图像源输入std::vector<cv::Mat> srcImages(9);srcImages[0] = cv::imread("a.jpg");srcImages[1] = cv::imread("a.jpg");srcImages[2] = cv::imread("a.jpg");srcImages[3] = cv::imread("a.jpg");srcImages[4] = cv::imread("a.jpg");srcImages[5] = cv::imread("a.jpg");srcImages[6] = cv::imread("a.jpg");srcImages[7] = cv::imread("a.jpg");srcImages[8] = cv::imread("a.jpg");// 判断当前vector读入的正确性for (int i = 0; i < srcImages.size(); i++){if (!srcImages[i].data){std::cout << "read error!" << std::endl;return -1;}}//调用单窗口显示图像showManyImages(srcImages, cv::Size(512, 400));cv::waitKey(0);return 0;
}

转载于:https://www.cnblogs.com/k5bg/p/11076766.html

OpenCV2:幼儿园篇 第一章 创建图像并显示相关推荐

  1. oracle心间directory并附权,【Oracle】第一章创建授权

    ORACLE 第一章创建授权 通过命令查看控制文件,数据文件,日志文件: 控制文件 :Desc v$controlfile; 数据文件 :desc v$datafile; 日志文件:desc v$lo ...

  2. 第二篇第一章概述及第二章生产和储存物品的火灾危险性分类 重点在于表格...

    2019/1/4 [录播]2018一消精华班-实务-一级消防工程师-环球网校 http://v.edu24ol.com/?type=lesson&id=178923&gid=16157 ...

  3. 第一篇第一章燃烧的基础知识

    2019/1/3 [录播]2018一消精华班-实务-一级消防工程师-环球网校 http://v.edu24ol.com/?type=lesson&id=178941&gid=16157 ...

  4. 第一章第二题(显示五条消息)(Display five messages)

    第一章第二题(显示五条消息)(Display five messages) 1.2(显示五条消息)编写程序,显示 Welcome to Java 五次. 1.2 (Display five messa ...

  5. python第一个发行版本由c语言实现_1 晓白的python逆袭之旅基础篇---第一章

    第一章 来自晓白的困惑 1人物介绍晓白:一位即将毕业,踏入社会的大学生,对自己的前途充满了困惑,对计算机编程感兴趣,想以后进入互联网行业,从事开发工作,但是不知如何开始. 老袁:晓白的学长,同时也是晓 ...

  6. 牛客网算法教程-中级篇-第一章

    文章目录 学习目标: 学习内容: 学习时间: 学习产出: 1.旋转词-模拟 2.旋转矩阵-模拟 3.数轴覆盖-贪心 4.1 完整字符串1(括号字符串的有效性)-栈 4.2 完整字符串2(缺失的括号)- ...

  7. java程序设计基础篇_Java语言程序设计(基础篇) 第一章

    第一章 计算机.程序和Java概述 1.1 引言 什么是程序设计呢? 程序设计就是创建(或者开发)软件,软件也称为程序. 1.2 什么是计算机 计算机是存储和处理数据的电子设备,计算机包括硬件(har ...

  8. 鸟哥的Linux私房菜(基础篇)-第一章、Linux是什么(一.4. 重点回顾)

    第一章.Linux是什么 最近更新日期:2009/08/05 4. 重点回顾 5. 本章习题 6. 参考数据与延伸阅读 7. 针对本文的建议:http://phorum.vbird.org/viewt ...

  9. 鸟哥的Linux私房菜(基础篇)-第一章、Linux是什么(一.3. Linux的特色)

    第一章.Linux是什么 最近更新日期:2009/08/05 3. Linux的特色 3.1 Linux的特色 3.2 Linux的优缺点 3.3 关于授权 Linux的特色 Linux是Torval ...

最新文章

  1. JavaScript:引用js文件时的编码格式问题
  2. 爷青回!16年前“打球AI”意外走红,程序员留下了自己的ICQ和MSN
  3. 2018.4.13 用java配置/生成Xml文件 结合IO流知识点
  4. 3DMAX 处理反面
  5. 如何在SpringBoot项目中使用拦截器
  6. openjdk和jdk_JDK 11:发行候选更新和OpenJDK JDK 11 LTS
  7. 【转】在C#中使用SQLite
  8. 【Day01】你有封装过 axios 吗?主要是封装哪些方面?如何中断 axios 请求?
  9. VSCode详细安装教程
  10. java虚拟机结构图解(堆栈方法区)
  11. Java Web 开发书籍
  12. html 获取当前页面地址,通过js获取当前页面url的信息
  13. 正则 - 纳税人识别号
  14. 开源免费好用的磁盘镜像工具Etcher
  15. JVM(1)——字节码
  16. c语言模拟银行ATM的程序,简单模拟银行ATM取款系统 | C/C++程序员之家
  17. 微信怎么查计算机成绩查询,如何用微信免费查询自己的成绩?——易查分快速帮您实现...
  18. 补码一位乘法-一般乘法与Booth的证明与原理
  19. 质量是企业的生命,如何破解质量管控难题?质量管理系统推荐
  20. CCF 模拟题 有趣的数 (数位DP)

热门文章

  1. 如何利用云原生技术构建现代化应用
  2. 电商搜索能力解读-实体识别(NER)
  3. Serverless:这真的是未来吗?(二)
  4. Ask Me Anything #1 我是新晋CNCF TOC张磊,你有什么想问我的?
  5. 开源微服务运行时 Dapr 1.0 版本
  6. AI 云原生浅谈:好未来 AI 中台实践
  7. 阿里研究员:软件测试中的18个难题
  8. ORACLE TEXT FILTER PREFERENCE(三)
  9. ERROR OGG-01163 Bad column length (30) specified for column name in table TEST.demo_src, maximum all
  10. WCF(五) 深入理解绑定