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",//-)!=){
//创建窗口
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 )

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

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 )

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", )) != && (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 );

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

代码解读:

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

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

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

4.显示图像。

opencv 简单、常用的图像处理函数(2)的更多相关文章

  1. python进阶—OpenCV之常用图像操作函数说明(转)

    文章目录cv2.thresholdcv2.bitwise_andcv2.bitwise_orcv2.bitwise_notcv2.inRangecv2.resizecv2.adaptiveThresh ...

  2. OpenCV常用基本处理函数(4)简单变换,阈值等

    几何变换 缩放 img=cv2.imread('messi5.jpg') # 下面的 None 本应该是输出图像的尺寸,但是因为后边我们设置了缩放因子 # 因此这里为 None res=cv2.res ...

  3. OpenCV常用数据结构和函数

    点的表示:Point类 Point类数据结构表示二维坐标系下的点,即由其图像坐标x,y指定的2D点. 用法如下 Point point; point.x = 10; point.y = 8; 或者 P ...

  4. OpenCV常用基本处理函数(8)图像变换

    傅里叶变换 傅里叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅里叶变换就表示f的频谱. 图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度.如:大面积的沙 ...

  5. opencv中矩阵计算的一些函数

    转自:http://blog.sina.com.cn/s/blog_7908e1290101i97z.html 综述: OpenCV有针对矩阵操作的C语言函数. 许多其他方法提供了更加方便的C++接口 ...

  6. OpenCV 学习笔记03 findContours函数

    opencv-python   4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...

  7. 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...

  8. python学习笔记-day4笔记 常用内置函数与装饰器

    1.常用的python函数 abs             求绝对值 all               判断迭代器中所有的数据是否为真或者可迭代数据为空,返回真,否则返回假 any          ...

  9. R语言学习 第八篇:常用的数据处理函数

    Basic包是R语言预装的开发包,包含了常用的数据处理函数,可以对数据进行简单地清理和转换,也可以在使用其他转换函数之前,对数据进行预处理,必须熟练掌握常用的数据处理函数,本文分享在数据处理时,经常使 ...

随机推荐

  1. 鼠标经过图片时变换的两种方法--css+div及javascript应用

    javascript方式:    熟悉使用document.getElementById()取得节点对象 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTM ...

  2. 提取 ECharts 中的svg地图信息

    地图的需求还是蛮大的,全国都要自己画的话,还是需要投入比较大的人力. ECharts中有地图,那我们能不能把里面的地图文件提取出来呢,主要逻辑在map.js中. 看源代码发现,ECharts中地图信息 ...

  3. hdu 4635 Strongly connected 强连通

    题目链接 给一个有向图, 问你最多可以加多少条边, 使得加完边后的图不是一个强连通图. 只做过加多少条边变成强连通的, 一下子就懵逼了 我们可以反过来想. 最后的图不是强连通, 那么我们一定可以将它分 ...

  4. linux LVM 逻辑卷

    fdisk pvcreate vgcreate lvcreate 查看显示 创建 删除 扩容 激活 扫描查找 LV lvdisplay lvcreate lvremove lvextend lvcha ...

  5. 黑马程序员-- C语言变量作用域与代码块

    这里通过变量作用域的两种错误用法来介绍一下C语言变量作用域 其次对代码块的使用进行了简单说明: #include <stdio.h> 1.变量的作用域(作用范围) 变量定义的那一行开始,直 ...

  6. SQL Server 行的删除与修改-------------(未完待续P222 deep SQL Server 222 )

    删除: 1.堆表:当行被删除时,不会自动重新组织页面上的空间.删除行时不会从物理页面上删除, 而只是把行偏移设置为 0 .表示空间没有使用.除了页面上没有被回收空间之外,堆中的 空白页也常常不会被回收 ...

  7. 扩展C++ string类

    在实际开发过程中,C++string类使用起来有很多不方便的地方,笔者根据根据这些不足简单的扩展了这个类,如增加与数字之间的相互转化和格式化字符串.不足的地方望指正.读者也可以根据自己需求继续扩展. ...

  8. 不要将 Array、Object 等类型指定给 prototype

    在 JavaScript 中,注意不要将 Array.Object 等类型指定给 prototype,除非您的应用需要那么做.先观察如下代码: function Foo(){}Foo.prototyp ...

  9. vagrant打造自己的开发环境

    vagrant打造自己的开发环境 缘由: 在网上看到斌哥,爽神都写了关于vagrant的博客,都在说很强大,所以很好奇这玩意怎么个强大,然后也就自己来一发玩玩看看. 真实缘由: 说实话是电脑配置太低, ...

  10. poj2389---大数乘法

    #include<stdlib.h> #include<stdio.h> #include<string.h> #define MAX 100 int main() ...