opencv 简单、常用的图像处理函数(2)
2.简单常用的图片处理函数
opencv的项目以来配置和环境变量的配置都很简单,对于我这个没有c++基础的来说,复杂的是opencv的api和一些大部分来自国外没有翻译的资料,以及一些常见的编码问题。
资料
opencv安装目录详解
opencv安装完成后并配置好vc++项目后,先不要急着去按照书本上的例子打代码,这里 我们介绍一下opencv的安装目录,目录中有很详尽的功能解决方案,可以让我们在快速学习或项目时可以很方便找到相应功能的大体实现思路,所以了解opencv的安装目录,会加快我们学习的进度和对整体逻辑的理解。
下面简单介绍一下opencv的安装目录,以opencv2.4.13为例

opencv的安装根目录,其中build文件夹为配置项目时的依赖文件,这里在配置时,用处有大体的了解

以上是build文件夹中的文件
doc:生成文档所需的源文件以及辅助脚本
include:opencv引用的源码
java、python:java、python的引用文件
shard:opencv公用的数据文件,xml格式
x64、x86:不通系统下的依赖文件(32、64位操作系统)

以上文件是sources文件夹中的文件,是在opencv中比较有趣和让人兴奋的一部分。
3rdparty:包含第三方的库,比如视频解码用的 ffmpeg,jpg、png、tiff等图片的开源解码库。
apps:包含进行 haar 分类器训练的工具,opencv 进行人脸检测便是基于 haar 分类器。如果你想检测人脸以外的图片,千万不要错过这几个工具。
cmake:包含生成工程项目时 cmake 的依赖文件,用于智能搜索第三方库,普通开发者不需要关心这个文件夹的内容。
data:包含 opencv 库以及范例中用到的资源文件,haar 物体检测的分类器位于haarcascades子文件中。
doc:包含生成文档所需的源文件以及辅助脚本。
include:源码文件夹
modules:核心模块源码
platforms:包含交叉编译所需的工具链以及额外的代码,交叉编译指的是在一个操作系统中编译供另一个系统使用的文件。
samples:这个是我最喜欢的一个文件夹了,里面是代码的示例。
opencv图像处理
1.打开图片
//声明IplImage指针
IplImage * pImg;
//判断载入图像是否成功
if(pImg = cvLoadImage("image url",//-)!=){
//创建窗口
cvNamedWindow("Image",);
//显示图像
cvShowImage("Image",pImg);
//等待按键
cvWaitKey(-);
//销毁窗口
cvDestoryWindow("Image");
//释放图像
cvReleaseImage(&pImg);
}
使用函数及参数说明:
cvLoadIamge(fileName,flags); fileName:要被读入的文件的文件名(包括后缀) flags:读入图像的颜色和深度(flags=-1默认图像的原通道;flags=0强制转化为灰度图像;flags=1读取色彩图)
cvNamedWindow(windowName,flags);windowName:表示创建的窗口名称;flags:窗口属性(flags=0用户可以手动更改图像尺寸;flags=1用户不可编辑图像尺寸)
cvWaitKey(delay);函数的功能是不断刷新图像,频率时间为delay,单位为ms。
cvDestroyWindow(windowName);销毁指定名字的窗口。windowName:被销毁的窗体名称
cvReleaseImage(image);释放图像资源
2.拷贝保存图像
//打开图像
IplImage* pImg = createImage();
//根据打开的图像创建图像
IplImage * pImg2 = cvCreateImage(cvGetSize(pImg), pImg->depth, pImg->nChannels);
//拷贝图像
cvCopy(pImg, pImg2, NULL);
//设置该图像保存目录
cvSaveImage("image uri", pImg2);
//释放该图片资源
cvReleaseImage(&pImg2);
使用函数及参数说明:
cvCopy:拷贝一个数组给另一个数组。
cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL )
3.图像缩放
//声明两个图片指针
IplImage* src = ;//源图
IplImage* dst = ;//新图
float scale = 0.218;//缩放比例 取值0~1 源图比例为1
CvSize dst_cvsize; //新图尺寸 //判断路径图片是否存在 并赋值给src对象
if ((src = cvLoadImage("E:\\tiger.jpg")) != ){
//根据scale参数设置新图宽高
dst_cvsize.width = src->width * scale;
dst_cvsize.height = src->height * scale;
//以dst_cvsize 创建图片 并指向新图指针
dst = cvCreateImage(dst_cvsize, src->depth, src->nChannels);
//缩放源图至目标图
cvResize(src,dst,CV_INTER_LINEAR); //创建图像窗口
cvNamedWindow("src image window",CV_WINDOW_AUTOSIZE);
cvNamedWindow("dst image window", CV_WINDOW_AUTOSIZE); //显示两张图片
cvShowImage("src image window",src);
cvShowImage("dst image window", dst); //等待用户响应
cvWaitKey(-); //释放指针内存
cvReleaseImage(&src);
cvReleaseImage(&dst); //销毁所有窗口资源
cvDestroyAllWindows();
使用函数及参数说明:
cvResize:重新调整图像src(或它的ROI),使它精确匹配目标dst(或其ROI)。这里需要说明的是,cvResize可以用来调整3通道图像(如RGB图像)和单通道图像的大小。
cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR )
alpha混合 透明度
IplImage*src1, *src2;
if ((src1 = cvLoadImage("image1 url", )) != && (src2 = cvLoadImage("image2 url", )) != )
{
int x = ;
int y = ;
int width = ;
int height = ;
double alpha = 0.9;
double beta = 0.1;
cvSetImageROI(src1, cvRect(x, y, width, height));
cvSetImageROI(src2, cvRect(x, y, width, height)); cvAddWeighted(src1, alpha, src2, beta, 0.0,src1 );
cvResetImageROI(src1);
cvNamedWindow("alpha_blend", );
cvShowImage("alpha_blend", src1);
cvWaitKey();
}
使用函数及参数说明:
cvAddWeighted:分割多通道数组成几个单通道数组或者从数组中提取一个通道。
cvAddWeighted( const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst );
alpha //第一个数组元素的权值
src2 //第二个原数组
beta //第二个数组元素的权值
dst //输出数组
gamma //添加的常数项。
函数 cvAddWeighted 计算两数组的加权值的和:
dst(I)=src1(I)*alpha+src2(I)*beta+gamma
所有的数组必须有相同的类型相同的大小(这里是在学习时比较不易懂的地方,我理解其意思是,在操作的两个原数组的属性融合时,其值的和要和单一原数组的属性值相等,否则将会抛出异常)。
代码解读:
1.声明两个图像指针,通过cvLoadImage函数为其指定图片路径,并判断其图片读取合法性。
2.cvSetImageTOI函数标定cvRect函数所指定的坐标大小区域。
3.针对于操作区域进行图像的融合。
4.显示图像。

opencv 简单、常用的图像处理函数(2)的更多相关文章
- python进阶—OpenCV之常用图像操作函数说明(转)
文章目录cv2.thresholdcv2.bitwise_andcv2.bitwise_orcv2.bitwise_notcv2.inRangecv2.resizecv2.adaptiveThresh ...
- OpenCV常用基本处理函数(4)简单变换,阈值等
几何变换 缩放 img=cv2.imread('messi5.jpg') # 下面的 None 本应该是输出图像的尺寸,但是因为后边我们设置了缩放因子 # 因此这里为 None res=cv2.res ...
- OpenCV常用数据结构和函数
点的表示:Point类 Point类数据结构表示二维坐标系下的点,即由其图像坐标x,y指定的2D点. 用法如下 Point point; point.x = 10; point.y = 8; 或者 P ...
- OpenCV常用基本处理函数(8)图像变换
傅里叶变换 傅里叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅里叶变换就表示f的频谱. 图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度.如:大面积的沙 ...
- opencv中矩阵计算的一些函数
转自:http://blog.sina.com.cn/s/blog_7908e1290101i97z.html 综述: OpenCV有针对矩阵操作的C语言函数. 许多其他方法提供了更加方便的C++接口 ...
- OpenCV 学习笔记03 findContours函数
opencv-python 4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...
- 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...
- python学习笔记-day4笔记 常用内置函数与装饰器
1.常用的python函数 abs 求绝对值 all 判断迭代器中所有的数据是否为真或者可迭代数据为空,返回真,否则返回假 any ...
- R语言学习 第八篇:常用的数据处理函数
Basic包是R语言预装的开发包,包含了常用的数据处理函数,可以对数据进行简单地清理和转换,也可以在使用其他转换函数之前,对数据进行预处理,必须熟练掌握常用的数据处理函数,本文分享在数据处理时,经常使 ...
随机推荐
- 对config配置文件的读取和修改
在c#中想要使用对congfig文件的操作必要引用一个dll“system.configuration.dll” 读取 : string str= System.Configuration.Conf ...
- 向mysql添加新用户并分配权限
首先要声明一点,大部分情况下,修改MySQL是需要有mysql里的root权限的,所以一般用户无法更改密码,除非请求管理员. 方法一使用phpmyadmin,这是最简单的了,修改mysql库的user ...
- verilog 随笔
不是说你在代码里定义一个reg型变量,综合器就会综合处一个寄存器来,case必须在always块里,always里面的被赋值变量必须是reg型,这是语法的规定,只能遵守.写代码的时候不要加入触发器(不 ...
- 翻译 GITHUB上HOW TO BE A GOOD PROGRAMMER
转载请注明出处: http://www.cnblogs.com/hellocwh/p/5184072.html 更多内容点击查看 https://ahangchen.gitbooks.io/windy ...
- SQL Server 统计信息对查询的影响
优化器根据开消确定选择哪个执行计划,开消又与行数统计信息有关,默认情况下统计信息是在优化的过程中自动生成的. 一旦列被标记为需要统计信息,查询优化器就会查找该列以有的统计信息,如果以有一个统计信息,下 ...
- 在Windows平台下安装与配置Memcached的方法分享
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.Memcached ...
- Boost::Thread使用示例 - CG-Animation - 博客频道 - CSDN.NET
Boost::Thread使用示例 - CG-Animation - 博客频道 - CSDN.NET Boost::Thread使用示例 分类: C/C++ 2011-07-06 14:48 5926 ...
- java多线程向数据库写入数据
任务: 从sqlserver中将一个表A(约16W条数据)导到mysql中对应的一个表B中. 思路:分段获取A表中的数据后,用多个线程同时向B表中写入. 关键代码 //将数据库中的数据条数分段 pub ...
- find the mincost route(最小环,最短路,floyd)
find the mincost route Time Limit: 1000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- 达内TTS6.0课件oop_day02