目标:

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的图片。

本文结束。

最新文章

  1. Web接口测试工具---Poster与Postman
  2. VS2010 密钥问题
  3. Codis 集群搭建
  4. sqlserver 日期相关2
  5. 如何真正免费运营推广APP应用
  6. 【三支火把】---C语言面试问题总结
  7. keybd_event 转载
  8. C++中的析构函数
  9. [Redux] React Todo List Example (Filtering Todos)
  10. ASP.NET下使用xml反序列化、缓存实现个性化配置文件的实时生效
  11. Redux源码分析之bindActionCreators
  12. [转]RMI方式Ehcache集群的源码分析
  13. iOS 图片裁剪与修改
  14. 菜鸟学IT之python词云初体验
  15. IP代理网址
  16. 【sqli-labs】Less7
  17. python根据字符串导入模块
  18. ssh-keygen 不是内部或外部命令
  19. Combination Sum II leetcode java
  20. 细说Python2.x与3​​.x版本区别

热门文章

  1. 2018.10.30 mac环境下卸载和安装mysql及安装过程遇到的一些问题解决方案
  2. PAML学习一
  3. GPU CUDA编程中threadIdx, blockIdx, blockDim, gridDim之间的区别与联系
  4. mybatis学习记录五——动态sql
  5. java中equals以及==的用法(简单介绍)
  6. Spring-boot官方案例分析之log4j
  7. Vue--- Vue(Pubsub + Ajax) 数据交互
  8. 【2017 ICPC亚洲区域赛沈阳站 K】Rabbits(思维)
  9. poj 2763 Housewife Wind : 树链剖分维护边 O(nlogn)建树 O((logn)&#178;)修改与查询
  10. 关于 laravel 集合的使用