热门标签 | 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


推荐阅读
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
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社区 版权所有