【OpenCV学习笔记之二】图像的载入、显示与输出

原创 2018年04月16日 17:05:16
图像的载入

图像的载入用到了imread()函数,函数原型在OpenCV的官方文档中表示为

CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );

其中,第一个参数,填写我们需要载入的图像路径名。

第二个参数为载入标识,它表示载入图片时的颜色类型,有默认值1,表示载入三通道的彩色图像

图像的显示

图像的显示用到了namedWindow()函数和imshow()函数

namedWindow()函数原型为

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

第一个参数表示要创建窗口的名称

第二个参数表示创建窗口的标识

其还可以填写以下几种值

WINDOW_NORMAL ---设置这个值,在创建窗口后可以改变窗口大小

WINDOW_AUTOSIZE ---这个为默认值,在创建窗口后会自动调整以适应图像大小

WINDOW_OPENGL --- 设置这个值在创建窗口的时候会支持OpenGL

imshow()函数原型为

CV_EXPORTS_W void imshow(const String& winname, InputArray mat);

第一个参数填需要显示的窗口名称,与namedWindow函数创建的窗口名称一致就好

第二个参数表示需要显示的图像

在imshow()显示图像后,记得加一个waitKey(0)来暂停程序,显示你的图像

图像的输出

图像输出到图片文件用到imwrite()函数,函数原型为

CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
              const std::vector<int>& params = std::vector<int>());

第一个参数表示输出图片文件的名字,这里要注意,图片名字需要带上图片文件的后缀,如“1.jpg、2.png”

第二个参数表示输出的图像数据

第三个参数表示特定格式保存的参数编码,有默认值vector<int>(),一般可以忽略不填写。


图像的载入、显示和输出程序如下

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main(int argc,char** argv)
{
  Mat image = imread("1.jpg");
  namedWindow("原始图");
  imshow("原始图",image);
  cout<<"picture's basic information: "<<'\n'
      <<"picture's length: "<<image.cols<<'\n'
      <<"picture's width: "<<image.rows<<'\n'
      <<"picture's channels: "<<image.channels()<<endl<<endl;
  waitKey(0);
  Mat logo = imread("2.jpg");
  namedWindow("logo");
  imshow("logo",logo);
  cout<<"logo's basic information: "<<'\n'
      <<"logo's length: "<<logo.cols<<'\n'
      <<"logo's width: "<<logo.rows<<'\n'
      <<"logo's channels: "<<logo.channels()<<endl<<endl;
  waitKey(0);
  cout<<"The logo is too large,now let's make it small!"<<endl;
  waitKey(0);
  Mat smallLogo;
  resize(logo,smallLogo,Size(85,85));
  namedWindow("smallLogo");
  imshow("smallLogo",smallLogo);
  waitKey(0);
    
  Mat imageRoi;
  imageRoi = image(Rect(200,50,smallLogo.cols,smallLogo.rows));
  addWeighted(imageRoi,1,smallLogo,1,0.0,imageRoi);
  namedWindow("原图+logo");
  imshow("原图+logo",image);
  waitKey(0);
  imwrite("钢之炼金术师.jpg",image);
  waitKey(0);
  return 0;
}

程序的CMakeLists.txt跟之前提到的大同小异

程序中我用到了resize()函数来缩小logo的大小,这个其实可以在后面往图像中加logo时,在

addWeighted()中进行操作

resize()函数原型为

CV_EXPORTS_W void resize( InputArray src, OutputArray dst,
                          Size dsize, double fx = 0, double fy = 0,
                          int interpolation = INTER_LINEAR );

第一个参数为输入图像

第二个参数为输出图像

第三个参数为要输出图像的大小,通过cv::Size(width,height)来指定图像大小

第4个参数和第5个参数分别表示width和height方向的图像的缩放比例

第6个参数表示制定的插值方式,用于图像缩放后的像素大小的计算方法,有默认值

注意第三个参数dsize和fx/fy不能同时为0,若dsize为0,则图像的大小指定为

cv::Size(round(fx*src.cols),round(fy*src.rows))

程序的运行结果为


reference:

1.OpenCV3编程入门     毛星云、冷雪飞 等编著

2.Opencv 例程讲解 6 ---- 图片融合 addWeighted到底有多快?(这篇博客里有addWeighted的参数、用法)

OpenCV

-
  • 1970年01月01日 08:00

opencv学习笔记(一)——图像加载、显示、输出

想到opencv总有一些激动,觉得他的功能太强大了。学习opencv也有一段日子,但是回过头来想想总感觉有点不踏实,因为我总是在调用他的接口,好多东西没有深入去理解、去弄透。作为一个专业人士,这是不能...
  • Always2015
  • Always2015
  • 2015-03-22 21:38:12
  • 2716

opencv3编程入门学习笔记-----图像的载入、显示和输出到文件

转自http://blog.csdn.net/hx1298234467/article/details/49072035 1.1,图像的载入:imread()函数 其作用是:读取图片到Mat类变量中。...
  • qingkongyeyue
  • qingkongyeyue
  • 2016-09-20 17:29:14
  • 706

opencv的图像载入、显示和输出

1、关于opencv的命名空间       opencv中的C++类或者函数类都是定义在命名空间cv中的,两种方法可以访问,一种是在代码开头位置加上using namespace cv; 另外一种是在...
  • longwinyang
  • longwinyang
  • 2016-08-24 14:22:16
  • 915

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

C/C++ OpenCV图像的载入,显示,输出
  • qq78442761
  • qq78442761
  • 2017-01-06 22:22:00
  • 1365

【OpenCV】图像的载入显示和输出示例程序by浅墨

  • 2014年03月05日 16:08
  • 548KB
  • 下载

[OpenCV]图像的载入、显示、输出

先来看一个简单的OpenCV的程序:#include &amp;lt;iostream&amp;gt; #include &amp;lt;opencv2/core/core.hpp&amp;gt; #...
  • qq_27591163
  • qq_27591163
  • 2018-03-07 18:48:31
  • 11

opencv 图像的载入显示和输出

先说说我之前停更博客一周的问题,我从学校回家了,在家的我如一头没了束缚的野马,没有学一点东西不是吃就是睡就是打游戏看小说 =  =  在最新的opencv的库中,增添了mat类,mat类的函数imr...
  • qq_35859033
  • qq_35859033
  • 2017-08-14 17:31:55
  • 69

opencv 图像载入、显示和输出

#include #include using namespace cv; int main() { //图像载入和显示 Mat girl = imread("girl.jpg"); n...
  • fan_nlnl
  • fan_nlnl
  • 2017-07-29 11:16:25
  • 95

opencv学习笔记(十一)——图像的载入,显示和输出到文件

说明说明一下,之前的opencv学习基本是在opencv1.0的基础下学习的,在这节以后的都是基于opencv2.X下的学习。参考的是浅墨大神的《opencv3编程入门一书》。 ++++++++++...
  • hx1298234467
  • hx1298234467
  • 2015-10-12 12:41:10
  • 3008
收藏助手
不良信息举报
您举报文章:【OpenCV学习笔记之二】图像的载入、显示与输出
举报原因:
原因补充:

(最多只允许输入30个字)