先上代码

int main(int argc, char** argv)
{   Mat image0 = imread("1.png", 2 | 4); //载入无损原图像Mat image1 = imread("1.png", 0);//载入灰度图Mat image2 = imread("1.png", 200);//载入3通道的彩色图像imshow("载入无损原图像", image0);imshow("载入灰度图", image1);imshow("载入3通道的彩色图像", image2);waitKey();
}

imread()

imread函数:加载或读取一张图片

第一个参数: 填我们需要载入的图片的路径,默认路径在src目录下

支持的图片格式有

第二个参数:int类型的flags,为载入标识符,自带默认值为1

在imgcodecs.hpp文件中我们可以看到枚举是这样定义的

enum ImreadModes {IMREAD_UNCHANGED            = -1, //!< If set, return the loaded image as is (with alpha channel, otherwise it gets cropped). Ignore EXIF orientation.IMREAD_GRAYSCALE            = 0,  //!< If set, always convert image to the single channel grayscale image (codec internal conversion).IMREAD_COLOR                = 1,  //!< If set, always convert image to the 3 channel BGR color image.IMREAD_ANYDEPTH             = 2,  //!< If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.IMREAD_ANYCOLOR             = 4,  //!< If set, the image is read in any possible color format.IMREAD_LOAD_GDAL            = 8,  //!< If set, use the gdal driver for loading the image.IMREAD_REDUCED_GRAYSCALE_2  = 16, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/2.IMREAD_REDUCED_COLOR_2      = 17, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/2.IMREAD_REDUCED_GRAYSCALE_4  = 32, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/4.IMREAD_REDUCED_COLOR_4      = 33, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/4.IMREAD_REDUCED_GRAYSCALE_8  = 64, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/8.IMREAD_REDUCED_COLOR_8      = 65, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/8.IMREAD_IGNORE_ORIENTATION   = 128 //!< If set, do not rotate the image according to EXIF's orientation flag.};

需要注意: flags可以使用 | 来附加多个标志,但是如果标志冲突的话,就会自动取最小的一个

imshow()

imshow函数:显示一张图片

第一个参数:填需要显示的窗口的标识名称

第二个参数:InputArray类型的mat,填需要显示的图像

namedWindow()

namedWindow()函数:用于创建一个窗口。 若是简单地进行图片显示,可以略去namedWindow函数的调用,即先调用imread读入图片,然后用imshow直接指定出窗口名进行显示即可。但需要在显示窗口之前就用到窗口名时,比如滑动条的使用,要指定滑动条依附到某个窗口上,就需要namedWindow函数先创建出窗口,显式地规定窗口名称了。

第一个参数:填写被用作窗口的标识符的窗口名称。

第二个参数:int类型的flags,窗口的标识,可以填如下几种值。

首先需要注意的是,namedWindow函数有默认值WINDOW_ AUTOSIZE,所以,一般情况下,这个函数我们填一个变量就行了。namedWindow函数的作用是通过指定的名字,创建一个可以作为图像和进度条的容器窗口。如果具有相同名称的窗口已经存在,则函数不做任何事情。我们可以调用destroyWindow()或者destroyAllWindows()函数来关闭窗口,并取消之前分配的与窗口相关的所有内存空间。

imwrite()

imwrite()函数:输出图像到文件

第一个参数:const string&类型的filename, 填需要写入的文件名。注意要带上后缀,如“123.jpg”。

第二个参数:InputArray 类型的img,-般填个Mat类型的图像数据。

第三个参数:const vector<int> &类型的params,表示为特定格式保存的参数编码。它有默认值vector<int>(),所以一般情况下不需要填写。而如果要填写的话,有下面这些需要了解的地方:

●对于JPEG格式的图片,这个参数表示从0到100的图片质量(CV_ IMWRITE_ JPEG_ QUALITY), 默认值是95。

●对于PNG格式的图片,这个参数表示压缩级别(CV_ IMWRITE PNG_COMPRESSION)从0到9。较高的值意味着更小的尺寸和更长的压缩时间,默认值是3。

●对于PPM,PGM,或PBM格式的图片,这个参数表示一个二进制格式标志(CV_ IMWRITE_ PXM_ BINARY),取值为0或1,默认值是1。

imwrite函数用于将图像保存到指定的文件。图像格式是基于文件扩展名的,可保存的扩展名和imread中可以读取的图像扩展名一-致。

 //1.图像的载入和显示Mat toy = imread("3.jpg");namedWindow("toyPic", WINDOW_NORMAL);imshow("toyPic", toy);waitKey(0);

//2.初级图像混合//载入背景图 和 logo图Mat logo = imread("4.jpg");Mat image = imread("3.jpg");namedWindow("picOne", WINDOW_NORMAL);imshow("picOne", logo);namedWindow("picTwo", WINDOW_NORMAL);imshow("picTwo", image);cout << "logo.cols = " << logo.cols <<"    logo.rows = " <<logo.rows << endl;cout << "image.cols = " << image.cols << "    image.rows = " << image.rows << endl;//定义一个Mat类型,用于存放图像的ROIMat imageRoi;//方式一rectangle(image, Rect(0, 0, 600, 200), Scalar(0, 255, 0), 2); //将感兴趣区域框出来imageRoi = image(Rect(0, 0, logo.cols, logo.rows));//方式二//imageRoi = image(Range(350, 350 + logo.rows), Range(800, 800 + logo.cols));//把logo加到原图上addWeighted(imageRoi, 0.5, logo, 0.5, 0.0, imageRoi);namedWindow("allImage", WINDOW_NORMAL);//显示结果imshow("allImage", imageRoi);waitKey(0);

上面这个程序我进行了不少调试,因为不清楚这些参数的作用。用到了imageRoi这个变量,当时我在想为什么是这个变量名呢,然后简单搜了一下,果然是有原因。

在图像处理领域,有一个非常重要的名词ROI。

什么是ROI?

它的英文全称是Region Of Interest,对应的中文解释就是感兴趣区域。

感兴趣区域,就是我们从图像中选择一个图像区域,这个区域就是图像分析所关注的焦点。我们圈定这个区域,那么我们要处理的图像就从大图像变为一个小图像区域了,这样以便进行进一步处理,可以大大减小处理时间。

定义ROI区域有两种方法:

第一种,指定矩形的坐标,并且规定好他的长宽。

Mat img = imread("1.jpg");
Mat roi = img(Rect(500, 200, 100, 300));//Rect四个形参分别是:x坐标,y坐标,长,高;注意(x,y)指的是矩形的左上角点

第二种,指定感兴趣的行或列的范围。

Mat img = imread("1.jpg");
Mat roi = img(Range(250, 250 + 100), Range(200, 200 + 100));//Range两个形参分别是:起始行或列,起始行或列+偏移量

绿色框的部分只是我做出的一个示例,并不是这个程序真正设置的区域,这个程序中设置的区域应该是

 rectangle(image, Rect(0, 0, logo.cols, logo.rows), Scalar(0, 255, 0), 2); //将感兴趣区域框出来

我想尝试下把在飞机上拍的那张照片缩放然后放到积木人那张图片里面

 //2.初级图像混合//载入背景图 和 logo图Mat logo = imread("4.jpg", 100);Mat image = imread("3.jpg");namedWindow("picOne", WINDOW_NORMAL);imshow("picOne", logo);namedWindow("picTwo", WINDOW_NORMAL);imshow("picTwo", image);cout << "logo.cols = " << logo.cols <<"    logo.rows = " <<logo.rows << endl;cout << "image.cols = " << image.cols << "    image.rows = " << image.rows << endl;//定义一个Mat类型,用于存放图像的ROIMat imageRoi;//方式一rectangle(image, Rect(0, 0, 400, 400), Scalar(0, 255, 0), 6); //将感兴趣区域框出来imageRoi = image(Rect(0, 0, logo.cols, logo.rows));//方式二//imageRoi = image(Range(350, 350 + logo.rows), Range(800, 800 + logo.cols));//把logo加到原图上addWeighted(imageRoi, 0.5, logo, 0.5, 0.0, imageRoi);namedWindow("allImage", WINDOW_NORMAL);//显示结果imshow("allImage", image);waitKey(0);

我发现imread的第二个参数如果没有填入枚举里面的数字也是有用的,这并不奇怪,奇怪的是为什么填入数字范围不同,图片的分辨率似乎也会不同。 这个留着明天请教大佬吧。

 addWeighted(imageRoi, 0.5, logo, 0.5, 0.0, imageRoi);

剩下最后一个这个比较陌生,只是设置下图片的权重,参数比较简单。

参数一:图一,可以理解为背景图片

参数二:图一的权重,即融合比例

参数三:图二,可以理解为要融合的图片

参数四:图二的权重

参数五:融合后的图片的偏移量,值取得很大时图片发白

参数六:融合后的图片

OpenCV之图像的载入、显示与输出相关推荐

  1. OpenCV(二)图像的载入,显示,和输出

    一.OpenCV的命名空间 在写简单的OpenCV程序的时候,以下两句话是标配: #include<opencv2/opencv.hpp> using namespace cv; 二.关于 ...

  2. 【opencv】2.图像读取、显示、输出

    看得见的东西往往使我们更有兴致,从看得见的开始学 [一]头文件和名字空间 你可以直接包含整个opencv的所有文件,也可以按需包含各个模块文件,模块结构的划分可以参考博文:opencv模块结构划分,这 ...

  3. C/C++ OpenCV图像的载入,显示,输出

    首先有以下几个介绍 1.Mat类 用于保存图像以及其他矩阵数据的数据结构,默认情况下其尺寸为0. 2.imread()函数 图片的载入 Mat imread(const string& fil ...

  4. 【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析

    [-] 一开胃菜之一  关于OpenCV的命名空间 二开胃菜之二  关于Mat类型 三图像的载入和显示 imread函数 namedWindow函数 imshow函数 四输出图像到文件imwrite函 ...

  5. 【OpenCV】OpenCV实战从入门到精通图像的载入、显示与输出

    书中关于图像的载入.显示与输出的综合应用.有些细节知识将在本博客后续更新. #include <opencv2/core/core.hpp> #include <opencv2/hi ...

  6. OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并

    OpenCV之Python学习笔记 一直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看到一本国外的新书< ...

  7. 转载:【opencv入门教程之三】:图片的载入|显示|输出

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/20537737 作者:毛星云(浅墨) ...

  8. 图像的载入、显示与输出

    图像的载入imread.显示imshow与输出imwrite 文章目录 图像的载入imread.显示imshow与输出imwrite 前言 一.图像的载入:imread 二.图片的显示:imshow ...

  9. opencv读取图像始终显示NoneType

    1. 问题 项目需要用opencv实现图像的读取和变化,读取图像时却一直显示图像类型为NoneType, def data_aug(img_path,path,count):print(img_pat ...

最新文章

  1. 第十三课.随机近似初步:蒙特卡洛方法
  2. 寒假——练车、脑力风暴和辅导初中生
  3. Android WindowManager 解析与骗取 QQ 密码案例分析
  4. vim+cscope的使用
  5. python oracle 运维,mysql oracle python连接
  6. 学习Spring Boot:(二十七)Spring Boot 2.0 中使用 Actuator
  7. github连接出现Bad file number问题
  8. STM32学习:串口通讯(proteus仿真)
  9. LAMP架构(八)限定某个目录禁止解析、 限制user_agent、php相关配置
  10. python种颜色循环_如何用Python做一个RGB和16进制的互转工具
  11. iOS 应用状态详解
  12. pdf、epub、mobi、三种下载方式区别
  13. 【亲测有效】硬盘/分区修复教程
  14. 恢复更新--vue源码系列1之如何看源码
  15. 十六、react UI组件库
  16. 阿里P6+面试:介绍下观察者模式?
  17. 辣妈直升机视频号值得学习吗
  18. 工业和信息化部全国信息技术水平考试
  19. 【生信MOOC】生物序列比对工具——多序列比对
  20. uni-app 微信小程序 分享功能 传参 接收 与 调试

热门文章

  1. CeSi 进程集中管理部署
  2. html打开无法显示网页怎么回事,Win7打开网页提示“Internet Explorer无法显示该页面”如何解决?...
  3. Excel自动转曲线图的时PHP,Excel折线图随着数据的插入动态变化,掌握此技能的人不足1﹪!...
  4. 手机摄影-参数(快门)
  5. PostgreSQL on duplicate update
  6. 一分钟集成类似抖音、头条、腾讯视频、网易新闻、飞猪、咸鱼等常用标题栏
  7. python自学路线——人工智能方向
  8. 目前最值得入手的蓝牙耳机有哪些?四款高性价比蓝牙耳机推荐
  9. 打怪小游戏(快做完了)
  10. 百度地图Geolocation的getStatus状态值(百度API获取当前位置[经纬度])