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语言预装的开发包,包含了常用的数据处理函数,可以对数据进行简单地清理和转换,也可以在使用其他转换函数之前,对数据进行预处理,必须熟练掌握常用的数据处理函数,本文分享在数据处理时,经常使 ...
随机推荐
- CSS 实现底部固定
在制作页面有这样一种现象:当一个HTML页面中含有较少的内容时,Web页面的“footer”部分随着飘上来,处在页面的半腰中间,给视觉效果带来极大的影响,让你的页面看上去很不好看,特别是现在宽屏越来越 ...
- javascript 多行字符串
javascript 字符串多行 平时一般使用 字符串+,或者[].join('')的方式 同事推荐了这样的形式 ExceptionDivHtml="<div class='gameI ...
- visual studio 配置OpenGL环境
首先在网上下载一个GLUT工具包. glut.zip,大约一百多kb. 解压之后得到这么几个文件: 将glut.h复制到C:\Program Files (x86)\Microsoft Visual ...
- [基础]RHEL6下iSCSI客户端挂载配置
本文根据鸟哥私房菜进行操作:http://linux.vbird.org/linux_enterprise/xen.php?thisscreen=800x600 一.侦测 [root@vhost3 ~ ...
- python <tab>自动补全
1.获取python目录[我使用的是64位ubuntu系统] [~$]python Python 2.7.3 (default, Apr 10 2013, 06:20:15) [GCC 4.6.3] ...
- 在.NET中快速创建一个5GB、10GB或更大的空文件
对于通过UDP进行打文件传输的朋友应该首先会考虑到一个问题,那就是由于UDP并不会根据先来先到原则进行发送,也许你发送端发送的时候是以包1和包2的顺序传输的,但接收端可能以包2和包1 的顺序来进行接收 ...
- web - 块元素和内嵌元素的特征
块: 1.独占一行 2.支持所有的样式 3.不设置宽度的时候,宽度撑满整行 常用的快标签有: div,section,header,nav,footer,article,aside,ul,ol,li, ...
- 部署SharePoint2013解决方案
Add-SPSolutionInstall-SPSolution -Identity Grain2013.wsp -GACDeployment -CompatibilityLevel {14,15} ...
- ubuntu 64位设置兼容32位 for ADB 命令无法运行
在虚拟机上Ubuntu系统里安装ADT开发工具,配置好环境后导入Android工程报错: 找不到Adb命令: ubuntu 12.04 64位设置兼容32位的实现REF:http://www.2cto ...
- Linux分区方案
创建三个分区 1./boot 启动分区 存放内核和启动程序 空间分配:100M 类型:ext4 2./swap 交换分区 虚 ...