热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

opencv简单、常用的图像处理函数(2)

1.vc配置opencv2.简单常用的图片处理函数3.图像修复函数opencv的项目以来配置和环境变量的配置都很简单,对于我这个没有c基础的来说,复杂的

1.vc++配置opencv

2.简单常用的图片处理函数

3.图像修复函数

 

opencv的项目以来配置和环境变量的配置都很简单,对于我这个没有c++基础的来说,复杂的是opencv的api和一些大部分来自国外没有翻译的资料,以及一些常见的编码问题。

资料

opencv 中文api

博客园tornadomeet的opencv学习笔记

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",0/1/-1)!=0){//创建窗口cvNamedWindow("Image",1);//显示图像cvShowImage("Image",pImg);//等待按键cvWaitKey(-1);//销毁窗口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 )

src:输入数组。
dst:输出数组。
mask:操作掩码是8比特单通道的数组,它指定了输出数组中被改变的元素。

3.图像缩放

//声明两个图片指针IplImage* src = 0;//源图IplImage* dst = 0;//新图float scale = 0.218;//缩放比例 取值0~1 源图比例为1CvSize dst_cvsize; //新图尺寸//判断路径图片是否存在 并赋值给src对象if ((src = cvLoadImage("E:\\tiger.jpg")) != 0){//根据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(-1);//释放指针内存cvReleaseImage(&src);cvReleaseImage(&dst);//销毁所有窗口资源cvDestroyAllWindows();

 

使用函数及参数说明:

cvResize:重新调整图像src(或它的ROI),使它精确匹配目标dst(或其ROI)。这里需要说明的是,cvResize可以用来调整3通道图像(如RGB图像)和单通道图像的大小。

cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR )

src: 源图像
dst :目标图像
interpolation 修改、插补的方法,取值如下:
·CV_INTER_NN - 最近-邻居插补
·CV_INTER_LINEAR - 双线性插值(默认方法)
·CV_INTER_AREA - 像素面积相关重采样。当缩小图像时,该方法可以避免波纹的出现。当放大图像时,类似于方法CV_INTER_NN。(It is the preferred method for image decimation that gives moire-free results. In case of zooming it is similar to CV_INTER_NN method. )
·CV_INTER_CUBIC -双三次插值

 

alpha混合 透明度 

  IplImage*src1, *src2;if ((src1 = cvLoadImage("image1 url", 1)) != 0 && (src2 = cvLoadImage("image2 url", 1)) != 0){int x = 20;int y = 20;int width = 200;int height = 200;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", 1);cvShowImage("alpha_blend", src1);cvWaitKey();}

使用函数及参数说明:

cvAddWeighted:分割多通道数组成几个单通道数组或者从数组中提取一个通道。

cvAddWeighted( const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst );

各个变量的意义:
src1 //第一个原数组. 
  alpha //第一个数组元素的权值 
  src2 //第二个原数组 
  beta //第二个数组元素的权值 
  dst //输出数组 
  gamma //添加的常数项。 
  函数 cvAddWeighted 计算两数组的加权值的和: 
  dst(I)=src1(I)*alpha+src2(I)*beta+gamma 
  所有的数组必须有相同的类型相同的大小(这里是在学习时比较不易懂的地方,我理解其意思是,在操作的两个原数组的属性融合时,其值的和要和单一原数组的属性值相等,否则将会抛出异常)。

 代码解读:

1.声明两个图像指针,通过cvLoadImage函数为其指定图片路径,并判断其图片读取合法性。

2.cvSetImageTOI函数标定cvRect函数所指定的坐标大小区域。

3.针对于操作区域进行图像的融合。

4.显示图像。

 

 


转载于:https://www.cnblogs.com/z-yue/p/5725882.html


推荐阅读
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 本地存储组件实现对IE低版本浏览器的兼容性支持 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文详细解析了一种实用的函数,用于从URL中提取查询参数。该函数通过处理URL中的搜索部分,能够高效地获取并解析出所需的参数值,适用于各种Web开发场景。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
author-avatar
风光好风光好啊_229
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有