目标:

1.从图片文件打开图片(imread)

2.显示图片(namedWindow和imshow)

3.转换当前图片为灰色图片(cvtColor)

4.保存图片(imwrite)

代码:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <iostream> using namespace cv;
using namespace std;
int main(int argc,char ** argv)
{
Mat image;
//从文件中加载图片到image
image = imread("lena.jpg",CV_LOAD_IMAGE_COLOR);
//如果图片加载失败
if (!image.data )
{
cout<<"read image failed"<<endl;
return -;
}
//创建显示图片窗口
namedWindow("Ori Pic",WINDOW_AUTOSIZE);
//显示窗口
imshow("Ori Pic",image);
//等待用户按键
waitKey(); //创建一个新矩阵用于
Mat grayImage;
//将图片转换成灰色,保存在grayimage中
cvtColor(image,grayImage,CV_BGR2GRAY);
//保存grayimage到文件
imwrite("lena_gray.jpg",grayImage); //创建灰色图片窗口
namedWindow("Gray Pic",WINDOW_AUTOSIZE);
//显示灰色图片
imshow("Gray Pic",grayImage);
//等待用户按键
waitKey();
return ;
}

API说明:

Mat:储存图片数据的结构,后面会详细说明。

Mat imread(const string& filename, int flags= )

filename:需要加载的文件名

flags:加载图像的颜色类型,可以取以下值。

CV_LOAD_IMAGE_ANYDEPTH 如果设置了则返回16/32位图像,如果没设置,则返回8位图像
CV_LOAD_IMAGE_COLOR 返回8位图像
CV_LOAD_IMAGE_GRAYSCALE 返回灰度图像
> 返回一个三通道图像
= 返回灰色图像
< 返回带有α通道的图像
void namedWindow(const string& winname, int flags=WINDOW_AUTOSIZE )

winname:窗口名字,也是窗口的标识符

flags:创建窗口标识,可以为以下值

WINDOW_NORMAL 窗口可以无约束的修改大小
WINDOW_AUTOSIZE 自动设置窗口大小为和图片适应的大小,并且不能修改
WINDOW_OPENGL 可以创建一个支持OpenGL的窗口
void imshow(const string& winname, InputArray mat)

winname:窗口的名字

mat:显示的图片数据。

此函数一般同waitkey同用,waitKey(0) 显示窗口直到用户按下键,waitkey(10) 显示窗口10ms。

void cvtColor(InputArray src, OutputArray dst, int code, int dstCn= )

src 输入的图片
dst 和src有着相同的尺寸和深度(depth)的输出图片缓存区
code 颜色空间转换码
dstCn 目标缓存区的颜色通道,如果为0则设置和源图像相同的通道

bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector<int>() )

filename:保存文件名

img:保存的图片

params:指定格式的数据存储的容器,以这种格式出现,paramId_1, paramValue_1,paramId_2, paramValue_2.

对于JPEG图像:parmId可以为:CV_IMWRITE_JPEG_QUALITY表示图片质量。paramValue_1可以为0-100(越高图片质量越好),默认是95。

对于PNG图像:parmId可以为:CV_IMWRITE_PNG_COMPRESSION 表示压缩等级。paramValue_1可以为0-9(越高图片越小),默认是3。

对于PPM, PGM, 和PBM图像:parmId可以为:CV_IMWRITE_PXM_BINARY 表示二进制格式化标志(binary format flag)。paramValue_1可以为0或1。默认是1。

显示效果

运行上面代码:

首先显示彩色图片:

10秒过后

同时当前目录增加了一张名为lena_gray.jpg的图片。

本文结束。

OpenCV入门:(二:加载,显示,修改以及保存图片)的更多相关文章

  1. SDWebImage 加载显示 GIF 与性能问题

    SDWebImage 加载显示 GIF 与性能问题 SDWebImage 4.0 之前,可以用 UIImageView 显示 GIF 图.如果 SDWebImage 4.0 还这么做,只会显示静态图. ...

  2. SDWebImage 加载显示 WebP 与性能问题

    SDWebImage 加载显示 WebP 与性能问题 本文包含自定义下载操作 SDWebImageDownloaderOperation 与编码器 SDWebImageCoder.SDWebImage ...

  3. 一个页面从输入URL到加载显示完成,发生了什么?

    面试经典题--URL加载 一.涉及基本知识点: 1. 计算机网络 五层因特尔协议栈: 应用层(dns.http):DNS解析成IP并完成http请求发送: 传输层(tcp.udp):三次握手四次挥手模 ...

  4. bootstrap模态框modal使用remote第二次加载显示相同内容解决办法

    bootstrap模态框modal使用remote动态加载内容,第二次加载显示相同内容解决办法 bootstrap的modal中,使用remote可以动态加载页面到modal-body中,并弹窗显示 ...

  5. [ActionScript 3.0] AS3.0 动态加载显示内容

    可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...

  6. 一个页面从输入url到页面加载显示完成,中间都经历了什么

    第一种解释: 一般会经历以下几个过程: 1.首先,在浏览器地址栏中输入url 2.浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容.若没有,则跳到第三步操作. 3 ...

  7. 浏览器加载显示html页面内容的顺序

    我们经常看到浏览器在加载某个页面时,部分内容先显示出来,又有些内容后显示.那么浏览器加载显示html究竟是按什么顺序进行的呢 其实浏览器加载显示html的顺序是按下面的顺序进行的:1.IE下载的顺序是 ...

  8. Mybatis源码解析(二) —— 加载 Configuration

    Mybatis源码解析(二) -- 加载 Configuration    正如上文所看到的 Configuration 对象保存了所有Mybatis的配置信息,也就是说mybatis-config. ...

  9. jquery预加载显示百分比

    jquery预加载显示百分比 <pre> <img class="bj loadimg" loadimg="/weiqingshu/images/1/b ...

  10. 1.BMap(百度地图)第二次加载显示不全

    问题: bmap第一次加载显示没问题: 第二次 再次加载这个页面时,地图的显示出现了问题: . 分析问题出现原因:你要确保dom创建后且处于显示状态(即display不能为none)才能再次初始化地图 ...

随机推荐

  1. Reverse Polish notation

    Reverse Polish notation is a notation where every operator follows all of its operands. For example, ...

  2. 【洛谷P2574】XOR的艺术

    XOR的艺术 题目链接 用线段树维护sum, 修改时 tag[p]^=1; sum=r-l+1-sum; 详见代码 #include<iostream> #include<cstdi ...

  3. 【luogu P3884 [JLOI2009]二叉树问题】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3884 对方不想和你说话并向你扔了一个lca模板. #include <cstdio> #incl ...

  4. 获取订单的product_id 和订单的数量

    php 获取订单的product_id 和相对id的数量 <?php foreach ($val->groupResults(2) as $key2=>$val2):?> &l ...

  5. iOS之一个iOS开发人员完整的学习路线

    iOS开发能力 掌握(最好是精通)OC语言和runtime各种细节(读过相关的clang源码和runtime源码为佳).精通基本的framework(Foundation,UIKit等,平时干活用得最 ...

  6. 前端关于SEO

    提高页面加载速度. 能用css解决的不用背景图片,背景图片也尽量压缩大小,可以几个icons放在一个图片上,使用background-position找到需要的图片位置.可以减少HTTP请求数,提高网 ...

  7. POJ 2398--Toy Storage(叉积判断,二分找点,点排序)

    Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6534   Accepted: 3905 Descr ...

  8. 大专生自学c++到找到工作的前前后后

    先做个自我介绍,我13年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了.13年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学 ...

  9. 【赛时总结】NOIP2018-三校联考1024

    ◇NOIP三校联考-1024◇ 发现以前的博客写得似乎都很水……基本上都没什么阅读量QwQ 决定改过自新╰( ̄ω ̄o) 就从这篇博客开始吧~ 现场考得无地自容,看到题解才发现一些东西……(我第三题还没 ...

  10. Docker(三):部署软件

    Docker的镜像文件可以在镜像仓库中进行搜索. 部署软件目录导航: 常用命令 部署 Tomcat 部署 MySQL 部署 Oracle 常用命令 docker的常用命令如下: docker -v , ...