OpenCV入门:(二:加载,显示,修改以及保存图片)
目标:
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入门:(二:加载,显示,修改以及保存图片)的更多相关文章
- SDWebImage 加载显示 GIF 与性能问题
SDWebImage 加载显示 GIF 与性能问题 SDWebImage 4.0 之前,可以用 UIImageView 显示 GIF 图.如果 SDWebImage 4.0 还这么做,只会显示静态图. ...
- SDWebImage 加载显示 WebP 与性能问题
SDWebImage 加载显示 WebP 与性能问题 本文包含自定义下载操作 SDWebImageDownloaderOperation 与编码器 SDWebImageCoder.SDWebImage ...
- 一个页面从输入URL到加载显示完成,发生了什么?
面试经典题--URL加载 一.涉及基本知识点: 1. 计算机网络 五层因特尔协议栈: 应用层(dns.http):DNS解析成IP并完成http请求发送: 传输层(tcp.udp):三次握手四次挥手模 ...
- bootstrap模态框modal使用remote第二次加载显示相同内容解决办法
bootstrap模态框modal使用remote动态加载内容,第二次加载显示相同内容解决办法 bootstrap的modal中,使用remote可以动态加载页面到modal-body中,并弹窗显示 ...
- [ActionScript 3.0] AS3.0 动态加载显示内容
可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...
- 一个页面从输入url到页面加载显示完成,中间都经历了什么
第一种解释: 一般会经历以下几个过程: 1.首先,在浏览器地址栏中输入url 2.浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容.若没有,则跳到第三步操作. 3 ...
- 浏览器加载显示html页面内容的顺序
我们经常看到浏览器在加载某个页面时,部分内容先显示出来,又有些内容后显示.那么浏览器加载显示html究竟是按什么顺序进行的呢 其实浏览器加载显示html的顺序是按下面的顺序进行的:1.IE下载的顺序是 ...
- Mybatis源码解析(二) —— 加载 Configuration
Mybatis源码解析(二) -- 加载 Configuration 正如上文所看到的 Configuration 对象保存了所有Mybatis的配置信息,也就是说mybatis-config. ...
- jquery预加载显示百分比
jquery预加载显示百分比 <pre> <img class="bj loadimg" loadimg="/weiqingshu/images/1/b ...
- 1.BMap(百度地图)第二次加载显示不全
问题: bmap第一次加载显示没问题: 第二次 再次加载这个页面时,地图的显示出现了问题: . 分析问题出现原因:你要确保dom创建后且处于显示状态(即display不能为none)才能再次初始化地图 ...
随机推荐
- jmeter报"msg":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported"的解决方法
1.报"msg":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supporte ...
- 2018.12.25 Spring中JDBCTemplate模版API学习
1 Spring整合JDBC模版 1.1 spring中土拱了一个可以操作数据库的对象.对象封装了jdbc技术 JDBCTemplateJDBC模板对象 1.2 与DBUtils中的QueryRunn ...
- 三、详述 IntelliJ IDEA 的使用界面
是否还记得在博文“IntelliJ IDEA 安装目录的核心文件讲解”中,这张充满神秘色彩的图片呢?进入她,让咱们一起感受她的魅力吧! 如上图所示,打开 IntelliJ IDEA 后,首先迎接咱们的 ...
- 【洛谷P4342】[IOI1998]Polygon
Polygon 比较裸的环形DP(也可以说是区间DP) 将环拆成链,复制到后面,做区间DP即可 #include<iostream> #include<cstdio> usin ...
- 【luogu P2947 [USACO09MAR]向右看齐Look Up】 题解
题目链接:https://www.luogu.org/problemnew/show/P2947 因为在单调队列上被dalao们锤爆 怒刷单调队列题 何为单调队列? 设我们的队列为从左至右单调递增 对 ...
- 【Calculus 微积分の一些个人理解】
微积分 微积分(Calculus)是高等数学中研究函数的微分(Differentiation).积分(Integration)以及有关概念和应用的数学分支.它是数学的一个基础学科.内容主要包括极限.微 ...
- Android学习笔记_34_自定义窗口标题
1.建好项目之后在它的layout文件夹下创建一个title.xml文件,作为自定义窗口标题的文件. <?xml version="1.0" encoding="u ...
- Zookeeper入门开发demo
package CreateGroup; import java.io.IOException; import java.util.List; import java.util.concurrent. ...
- fastRPC升级
根据fastRPC的应用测试,用DB操作发布服务测试,对已经存在的问题进行升级; 主要修改内容: 1.添加自定义加载器,根据配置文件,允许设置目录,放置第三方jar包,解决打包问题 2.默认情况,服务 ...
- Webpack学习笔记九 webpack优化总结
webpack 优化笔记 webpack4 自带的优化包括 swingTree(摇摆树)和作用域提升 swingTree 比如入口文件 index.js引入通用方法 util, 里面有 10个方法, ...