[OpenCV学习笔记3][图像的加载+修改+显示+保存]
正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识;
[1.学习目标]
图像的加载:imread()
图像的修改:cvtColor()
图像的显示:imshow()
图像的保存: imwrite()
[2.函数原型与参数说明]
a.图像的加载:
Mat imread( const string& filename, int flags= );
参数说明:
filename:文件盘符
flags:flags>0,三通道彩色图 flags=0,灰度图 flags<0,包含Alpha通道的图像
b.图像的修改:
void cvCvtColor( const CvArr* src, CvArr* dst, int code );
函数功能:色彩空间转换
参数说明:
src
输入的 8-比特 或浮点图像.
dst
输出的 8-比特 或浮点图像.
code
色彩空间转换,通过定义 CV_<src_color_space>2<dst_color_space> 常数 (见下面).
函数 cvCvtColor 将输入图像从一个色彩空间转换为另外一个色彩空间。函数忽略
IplImage 头中定义的 colorModel 和 channelSeq 域,所以输入图像的色彩空间应该
正确指定 (包括通道的顺序,对 RGB 空间而言,BGR 意味着布局为 B0 G0 R0 B1 G1 R1 ...
层叠的 24-位格式,而 RGB 意味着布局为 R0 G0 B0 R1 G1 B1 ... 层叠的 24-位格式.
RGB[A]->Gray: Y=0.212671*R + 0.715160*G + 0.072169*B + 0*A (CV_RGB2GRAY) //RGB到灰度
RGB<=>YCrCb (CV_BGR2YCrCb, CV_RGB2YCrCb, CV_YCrCb2BGR, CV_YCrCb2RGB)
RGB=>HSV (CV_BGR2HSV,CV_RGB2HSV)
RGB<=>XYZ (CV_BGR2XYZ, CV_RGB2XYZ, CV_XYZ2BGR, CV_XYZ2RGB):
c.图像的显示:
c.1:创建窗口函数cvNamedWindow
int cvNamedWindow( const char* name, int flags );
参数说明:
name
窗口的名字,它被用来区分不同的窗口,并被显示为窗口标题。
flags
窗口属性标志。目前唯一支持的标志是 CV_WINDOW_AUTOSIZE。当这个标志被设置后,如
果 用 户 不 能 手 动 改 变 窗 口 大 小 , 窗 口 大 小 会 自 动 调 整 以 适 合 被 显 示 图 像 ( 参 考
cvShowImage)。
c.2:销毁窗口(指定/所有) cvDestroyWindow /cvDestroyAllWindows
void cvDestroyWindow( const char* name );
name
要被销毁的窗口的名字。
函数 cvDestroyWindow 销毁指定名字的窗口。
c.3:在指定窗口中显示图像 cvShowImage
void cvShowImage( const char* name, const CvArr* image );
参数说明:
name
窗口的名字。
image
被显示的图像。
函数 cvShowImage 在指定窗口中显示图像。如果窗口创建的时候被设定标志
CV_WINDOW_AUTOSIZE,那么图像将以原始尺寸显示;否则,图像将被伸缩以适合窗口大
小。
d:保存图片到指定盘符 imwrite
bool imwrite( const String& filename, InputArray img,const std::vector<int>& params = std::vector<int>());
参数说明:
filename 表示需要写入的文件名,必须要加上后缀,比如“123.png”。
img 表示Mat类型的图像数据。
params 表示为特定格式保存的参数编码,它有一个默认值std::vector< int >(),所以一般情况下不用写。
[代码实例]
【运行环境】OpenCV3.0 + RedHat
【代码功能】将彩色图像转换成灰度图像保存
#include <iostream>
#include <cv.h>
#include <highgui.h> using namespace cv;
using namespace std; int main (void)
{
Mat src = imread("./2.jpg"); //读取2.jpg
if(src.empty())
{
printf("could not load image.....\n");
return -;
}
namedWindow("Opencv setup deno",CV_WINDOW_AUTOSIZE); //创建窗口
imshow("Opencv setup deno",src); //显示图片到窗口 namedWindow("Output windows",CV_WINDOW_AUTOSIZE); //创建窗口
Mat output_image;
cvtColor(src,output_image,CV_RGB2GRAY); //颜色空间转换 <彩色图像---灰度图像>
imshow("Output windows",output_image); //显示图片到窗口
imwrite("./3.jpg",output_image); //保存图片到指定盘符
cvWaitKey();
return ;
}
[运行结果]
12-22
[OpenCV学习笔记3][图像的加载+修改+显示+保存]的更多相关文章
- [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading
上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...
- Flutter学习笔记(19)--加载本地图片
如需转载,请注明出处:Flutter学习笔记(19)--加载本地图片 上一篇博客正好用到了本地的图片,记录一下用法: 首先新建一个文件夹,这个文件夹要跟目录下 然后在pubspec.yaml里面声明出 ...
- 【OpenCV学习笔记之一】图像加载,修改及保存
加载图像(用cv::imread)imread功能是加载图像文件成为一个Mat对象 其中第一个参数表示图像文件名称第二个参数 表示加载的图像是什么类型 支持常见的三个参数值IMREAD_UNCHANG ...
- XV6学习笔记(1) : 启动与加载
XV6学习笔记(1) 1. 启动与加载 首先我们先来分析pc的启动.其实这个都是老生常谈了,但是还是很重要的(也不知道面试官考不考这玩意), 1. 启动的第一件事-bios 首先启动的第一件事就是运行 ...
- Quartz.net 2.x 学习笔记03-使用反射加载定时任务
将定时任务信息存储在XML文件中,使用反射加载定时任务 首先新建一个MVC的空站点,使用NuGet添加对Quartz.net和Common.Logging.Log4Net1213的引用,同时使用NuG ...
- Android学习笔记_51_转android 加载大图片防止内存溢出
首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...
- OpenCV学习笔记(3)——图像的基本操作
获取图像的像素值并修改 获取图像的属性(信息) 图像的ROI() 图像通道的拆分及合并 1.获取并修改像素值 先读入图像装入一个图像实体,然后该实体相当于一个多维list,可以直接用数组操作提取像素信 ...
- WMS学习笔记:1.尝试加载WMS
1.首先找一个可用的WMS栅格地图服务:http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi 获取GetCapabilities: http://de ...
- Android学习笔记_36_ListView数据异步加载与AsyncTask
一.界面布局文件: 1.加入sdcard写入和网络权限: <!-- 访问internet权限 --> <uses-permission android:name="andr ...
随机推荐
- bzoj 3528: [Zjoi2014]星系调查
Description 银河历59451年,在银河系有许许多多已被人类殖民的星系.如果想要在行 星系间往来,大家一般使用连接两个行星系的跳跃星门. 一个跳跃星门可以把 物质在它所连接的两个行星系中互 ...
- iOS网络模块优化(失败重发、缓存请求有网发送)
iOS开发中,一般都是通过AFN搭建一个简易的网络模块来进行与服务器的通信,这一模块要优化好没那么简单,需要花费很多时间与精力,仅仅根据这几年来的填坑经验,总结下这一块的需要注意的地方,也是给自己梳理 ...
- Apache Avro# 1.8.2 Specification (Avro 1.8.2规范)一
h4 { text-indent: 0.71cm; margin-top: 0.49cm; margin-bottom: 0.51cm; direction: ltr; color: #000000; ...
- 移动端IOS第三方输入法遮挡底部Input及android键盘回落留白问题
var interval; //消息框获取焦点 $('#J_text').focus(function(){ interval = setInterval(function() { scrollToE ...
- > library('ggplot2') Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) : 不存在叫‘colorspace’这个名字的程辑包
> library('ggplot2')Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) : ...
- View学习(四)-View的绘制(draw)过程
View的draw过程相比之于measrue过程,也是比较简单的.并且在我们自定义View时,也经常需要重写onDraw方法,来绘制出我们要实现的效果. 如之前的文章所说,绘制的流程也是起始于View ...
- 由浅入深理解Java线程池及线程池的如何使用
前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担.线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory ...
- python 多进程开发与多线程开发
转自: http://tchuairen.blog.51cto.com/3848118/1720965 博文作者参考的博文: 博文1 博文2 我们先来了解什么是进程? 程序并不能单独运行,只有将程 ...
- CSS样式表学习
---恢复内容开始--- 今天学习的主要内容是样式表和选择器. 1.样式表的分类 1.内联式样式表 特点:能实现精确控制,但是范围太小.页面显示的优先级高于其他样式表 2.内嵌式样式表 特点:必须在h ...
- 只要发生ajax请求时加载旋转的按钮
定义一个变量 全局 c 只要发生ajax时给c++ 当ajax请求success或者error时,c--; 对加载的按钮添加个事件 监听 c 如果c得值没变化 则隐藏按钮 如果变化了则显示 ...