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语言预装的开发包,包含了常用的数据处理函数,可以对数据进行简单地清理和转换,也可以在使用其他转换函数之前,对数据进行预处理,必须熟练掌握常用的数据处理函数,本文分享在数据处理时,经常使 ...
随机推荐
- ecside入门
ECSide是有一个基于jsp tag的开源列表组件. 简单的说,它就是一组可以帮助你快速实现强大的列表的jsp标签. 它的工作原理很简单. 您将要展现的列表的数据集合(Collection),放入r ...
- scala函数进阶与lazy的作用
内容如下. lazy修饰的变量可以延迟初始化,如下面所示,文件未必存在,file变量未必有内容.
- RedMine 版本管理工具
一.介绍: Redmine 是一个开源的.基于Web的项目管理和缺陷跟踪工具.它用日历和甘特图辅助项目及进度可视化显示.同时它又支持多项目管理.Redmine是一个自由开放 源码软件解决方案,它提供集 ...
- [Leetcode][Python]23: Merge k Sorted Lists
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 23: Merge k Sorted Listshttps://oj.leet ...
- C++中的句柄类
初次在<C++ Primer>看到句柄,不是特别理解.在搜索相关资料后,终于有了点头绪. 首先明白句柄要解决什么问题.参考文章<C++ 沉思录>阅读笔记——代理类 场景: 我们 ...
- docker基于 aufs 文件系统
docker的核心功能就是容器版本管理,在容器层实现了CVS版本管理,比如git那种可以commit/roll back 而AUFS就是其实现基础 AUFS可以实现文件系统的snapshot,这样对f ...
- OA项目之打印
打印 若此页有一个打印按钮: <input type="button" id="btnPrint" class="button_sm7" ...
- XMPP安装中遇到需要卸载openfire的步骤
首先,确保你已经关掉了openfire打开终端 (在应用程序—>实用工具—>)输入以下命令sudo rm -rf /Library/PreferencePanes/Openfire.pre ...
- bootstrap 响应式布局 居中问题
大家能够通过table来设置居中: display: table; width: auto; margin-left: auto; margin-right: auto;
- asp.net弹出多个模态窗口
asp.net中无限制弹出模态窗口 特点: 1. 可以在模态窗口上再弹出模态窗口,不限制次数 2. 弹出窗口的支持拖放,及调整大小 3. 弹出窗口关闭后可以动态控制 ...