- 浏览: 344433 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (59)
- java (9)
- C++ (23)
- openCV (24)
- C++,算法 (1)
- QT (4)
- 机器学习 (11)
- android (2)
- 心得 (0)
- C++,opencvforandroid (0)
- opencvforandroid (2)
- 毕业设计 (9)
- 心情 (0)
- openCV,图像处理 (4)
- 车道线检测 (2)
- openCV,图像处理,曲线识别 (1)
- 机器学习,python (2)
- 机器学习,python,数据挖掘 (2)
- 算法 (3)
- MXNet (1)
- Tensorflow (0)
- flask (0)
- JAVAEE (1)
- python (1)
- 趣味问题 (1)
最新评论
-
liweicong:
这个识别的准确率是多少呢?训练的那个circle和四个参数代表 ...
交通标牌检测与识别 -
13227819390:
请问在博主的percolation代码块里的isFull函数, ...
并查集算法关于渗透模型中虚拟节点的使用问题 -
zzzimooo:
请问博主,大概在130行:Bitmap bmp = getRe ...
OpenCVforAndroid应用之银行卡号识别 ------ 实战篇 -
u010074054:
您好,我想请教一下关于银行卡识别的问题,您方便加一下我QQ吗? ...
OpenCVforAndroid应用之银行卡号识别 ------ 实战篇 -
javams:
闵大荒是什么?
闵大荒之旅(一)
openCV是一个庞大的计算机视觉库,那么要做好机器视觉,学好openCV的使用是必要的,那么我们不妨使用openCV写一些程序来进行入门,方便后期机器视觉的深入学习!
openCV包括以下几个模块(或者说是库吧):
1.cv
2.ML(Machine Learning)
3.highgui
4.cxcore
其中ML模块在openCV2以后就没有了,所以要使用openCV函数,将上述1、3、4包含进来就足够了!即在C++源文件开头处定义
#include"cv.h"
#include"highgui.h"
#include"cxcore.h"
那么这里就涉及到一个配置问题了,能这么写得益于openCV安装后的一系列配置。可以看到安装目录下(比如说我的D:\openCV\build\include\)有两个文件夹,一个是openCV,一个是openCV2,那么现在程序中用得更多的是后者。如果搞不清楚到底用哪个怎么办呢?好办,在属性表里将D:\openCV\build\include\openCV和D:\openCV\build\include\openCV2以及D:\openCV\build\include\均配置进来就好了,如此一来,你就可以放心地include头文件了!
搞清楚组成模块和头文件,那么接下来就可以编写第一个openCV的程序了。对于一个新手来说,处理图像或者模式识别还太过遥远,往往是显示图像来作为入门。
#include"highgui.h"
#include"cv.h"
#include"cxcore.h"
#include<iostream>
using namespace std;
int main()
{
IplImage* scr = cvLoadImage("8.png");
cvNamedWindow("showImage",0);
cvShowImage("showImage", scr);
cvWaitKey(5000);
cvReleaseImage(&scr);
return 0;
}
那接下来我们深入认识一下这个程序,看看这里有哪些值得我们关注的地方:
1.IplImage
这是openCV里号称最重要的一个结构体(为什么是号称?因为我也不晓得有多重要,以后自会见分晓)
typedef struct _IplImage
{
int nSize; /* IplImage大小 */
int ID; /* 版本 (=0)*/
int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */
int alphaChannel; /* 被OpenCV忽略 */
int depth; /* 像素的位深度,主要有以下支持格式: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,IPL_DEPTH_16S, IPL_DEPTH_32S,
IPL_DEPTH_32F 和IPL_DEPTH_64F */
char colorModel[4]; /* 被OpenCV忽略 */
char channelSeq[4]; /* 同上 */
int dataOrder; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道.
只有cvCreateImage可以创建交叉存取图像 */
int origin; /*图像原点位置: 0表示顶-左结构,1表示底-左结构 */
int align; /* 图像行排列方式 (4 or,在 OpenCV 被忽略,使用 widthStep 代替 */
int width; /* 图像宽像素数 */
int height; /* 图像高像素数*/
struct _IplROI *roi; /* 图像感兴趣区域,当该值非空时,
只对该区域进行处理 */
struct _IplImage *maskROI; /* 在 OpenCV中必须为NULL */
void *imageId; /* 同上*/
struct _IplTileInfo *tileInfo; /*同上*/
int imageSize; /* 图像数据大小(在交叉存取格式下ImageSize=image->height*image->widthStep),单位字节*/
char *imageData; /* 指向排列的图像数据 */
int widthStep; /* 排列的图像行大小,以字节为单位 */
int BorderMode[4]; /* 边际结束模式, 在 OpenCV 被忽略*/
int BorderConst[4]; /* 同上 */
char *imageDataOrigin; /* 指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的 */
} IplImage;
这就是IplImage具体的定义,我们可以看出这个结构体几乎反映了所有的图像信息
2.与IplImage相关的常用的几个函数
1. 图像载入函数
函数cvLoadImage载入指定图像文件,并返回指向该文件的IplImage指针。函数支持bmp、jpg、 png、 tiff等格式的图像。其函数原型如下:
IplImage* cvLoadImage( const char* filename, int iscolor);
其中,filename 是待载入图像的名称,包括图像的扩展名;iscolor是一个辅助参数项,可选正数、零和负数三种值,正数表示作为三通道图像载入,零表示该图像作为单通道图像,负数表示载入图像的通道数由图像文件自身决定。
2. 窗口定义函数
函数cvNamedWindow定义一个窗口,用于显示图像。其函数原型如下:
int cvNamedWindow( const char* name, unsigned long flags );
其中,name是窗口名,flags是窗口属性指标值,可以选择CV_WINDOW_AUTOSIZE和0两种值。CV_WINDOW_AUTOSIZE表示窗口尺寸与图像原始尺寸相同,0表示以固定的窗口尺寸显示图像。
3. 图像显示函数
函数cvShowImage是在指定的窗口中显示图像,其函数原型如下:
void cvShowImage( const char* name, const CvArr* image );
其中,name是窗口名称,image是图像类型指针,一般是IplImage指针。
4. 图像保存函数
函数cvSaveImage以指定的文件名保存IplImage类型的指针变量,其函数原型如下:
int cvSaveImage( const char* filename, const CvArr* image );
其中,filename是图像保存路径和名称,image是IplImage指针变量。
5. 图像销毁函数
函数cvReleaseImage销毁已定义的IplImage指针变量,释放占用内存空间。其函数原型如下:
void cvReleaseImage( IplImage** image );
其中,image为已定义的IplImage指针
那么上述程序就很容易解释了!
openCV包括以下几个模块(或者说是库吧):
1.cv
2.ML(Machine Learning)
3.highgui
4.cxcore
其中ML模块在openCV2以后就没有了,所以要使用openCV函数,将上述1、3、4包含进来就足够了!即在C++源文件开头处定义
#include"cv.h"
#include"highgui.h"
#include"cxcore.h"
那么这里就涉及到一个配置问题了,能这么写得益于openCV安装后的一系列配置。可以看到安装目录下(比如说我的D:\openCV\build\include\)有两个文件夹,一个是openCV,一个是openCV2,那么现在程序中用得更多的是后者。如果搞不清楚到底用哪个怎么办呢?好办,在属性表里将D:\openCV\build\include\openCV和D:\openCV\build\include\openCV2以及D:\openCV\build\include\均配置进来就好了,如此一来,你就可以放心地include头文件了!
搞清楚组成模块和头文件,那么接下来就可以编写第一个openCV的程序了。对于一个新手来说,处理图像或者模式识别还太过遥远,往往是显示图像来作为入门。
#include"highgui.h"
#include"cv.h"
#include"cxcore.h"
#include<iostream>
using namespace std;
int main()
{
IplImage* scr = cvLoadImage("8.png");
cvNamedWindow("showImage",0);
cvShowImage("showImage", scr);
cvWaitKey(5000);
cvReleaseImage(&scr);
return 0;
}
那接下来我们深入认识一下这个程序,看看这里有哪些值得我们关注的地方:
1.IplImage
这是openCV里号称最重要的一个结构体(为什么是号称?因为我也不晓得有多重要,以后自会见分晓)
typedef struct _IplImage
{
int nSize; /* IplImage大小 */
int ID; /* 版本 (=0)*/
int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */
int alphaChannel; /* 被OpenCV忽略 */
int depth; /* 像素的位深度,主要有以下支持格式: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,IPL_DEPTH_16S, IPL_DEPTH_32S,
IPL_DEPTH_32F 和IPL_DEPTH_64F */
char colorModel[4]; /* 被OpenCV忽略 */
char channelSeq[4]; /* 同上 */
int dataOrder; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道.
只有cvCreateImage可以创建交叉存取图像 */
int origin; /*图像原点位置: 0表示顶-左结构,1表示底-左结构 */
int align; /* 图像行排列方式 (4 or,在 OpenCV 被忽略,使用 widthStep 代替 */
int width; /* 图像宽像素数 */
int height; /* 图像高像素数*/
struct _IplROI *roi; /* 图像感兴趣区域,当该值非空时,
只对该区域进行处理 */
struct _IplImage *maskROI; /* 在 OpenCV中必须为NULL */
void *imageId; /* 同上*/
struct _IplTileInfo *tileInfo; /*同上*/
int imageSize; /* 图像数据大小(在交叉存取格式下ImageSize=image->height*image->widthStep),单位字节*/
char *imageData; /* 指向排列的图像数据 */
int widthStep; /* 排列的图像行大小,以字节为单位 */
int BorderMode[4]; /* 边际结束模式, 在 OpenCV 被忽略*/
int BorderConst[4]; /* 同上 */
char *imageDataOrigin; /* 指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的 */
} IplImage;
这就是IplImage具体的定义,我们可以看出这个结构体几乎反映了所有的图像信息
2.与IplImage相关的常用的几个函数
1. 图像载入函数
函数cvLoadImage载入指定图像文件,并返回指向该文件的IplImage指针。函数支持bmp、jpg、 png、 tiff等格式的图像。其函数原型如下:
IplImage* cvLoadImage( const char* filename, int iscolor);
其中,filename 是待载入图像的名称,包括图像的扩展名;iscolor是一个辅助参数项,可选正数、零和负数三种值,正数表示作为三通道图像载入,零表示该图像作为单通道图像,负数表示载入图像的通道数由图像文件自身决定。
2. 窗口定义函数
函数cvNamedWindow定义一个窗口,用于显示图像。其函数原型如下:
int cvNamedWindow( const char* name, unsigned long flags );
其中,name是窗口名,flags是窗口属性指标值,可以选择CV_WINDOW_AUTOSIZE和0两种值。CV_WINDOW_AUTOSIZE表示窗口尺寸与图像原始尺寸相同,0表示以固定的窗口尺寸显示图像。
3. 图像显示函数
函数cvShowImage是在指定的窗口中显示图像,其函数原型如下:
void cvShowImage( const char* name, const CvArr* image );
其中,name是窗口名称,image是图像类型指针,一般是IplImage指针。
4. 图像保存函数
函数cvSaveImage以指定的文件名保存IplImage类型的指针变量,其函数原型如下:
int cvSaveImage( const char* filename, const CvArr* image );
其中,filename是图像保存路径和名称,image是IplImage指针变量。
5. 图像销毁函数
函数cvReleaseImage销毁已定义的IplImage指针变量,释放占用内存空间。其函数原型如下:
void cvReleaseImage( IplImage** image );
其中,image为已定义的IplImage指针
那么上述程序就很容易解释了!
发表评论
-
交通标牌检测与识别
2017-03-09 19:39 23045关于交通标牌检测的博客和论文非常多,例如,本人最近在博客上 ... -
OpenCV+SVM简单应用-------路面箭头分类
2016-12-12 14:49 9145问题内容:路面箭头检测与识别(该部分主要介绍基于SVM的分 ... -
OpenCVforAndroid应用之银行卡号识别 ------ 实战篇
2016-01-23 10:19 10661上文中讲述了两种在android平台中使用opencv的办法 ... -
OpenCVforAndroid应用之银行卡号识别 ------ 搞定开发环境
2016-01-22 21:04 6478前阵子的考试、旅游 ... -
银行卡号识别(四) --- 基于k最近邻的银行卡提取及识别
2015-12-13 15:37 3357一、提取方法的修正 上回说道,我们使 ... -
银行卡号识别(三) --- 基于k最近邻的数字识别测试
2015-12-09 20:00 7627在进行完预处理之后,我们可以开始用算法识别数字了。首先我们 ... -
银行卡号识别(二) --- 再预处理
2015-12-09 00:19 4423上回书说道,我们对 ... -
银行卡号识别(一) --- 预处理
2015-12-04 00:18 10477受到微信钱包的启发,现在决心做一个类似的东东来玩 ... -
“愚蠢的四天”---QT与OpenCV的结合
2015-11-17 09:44 12974长沙这阴暗的天气已经持续好几天了,我也在这见 ... -
openCV入门----图像的几种变换方法
2015-11-12 22:24 4499在PS、画图 ... -
openCV入门----霍夫变换检测圆
2015-11-10 22:37 6965前面几次的内 ... -
openCV综合运用 ------- 检测三角形
2015-11-08 12:07 9625今天主要是研究另一个比较综合的例子。上一个例子只是简单地检 ... -
openCV综合运用 ------- 图像细化、线段长度、平行线距离检测
2015-11-06 13:06 22987在上述博客中 ... -
openCV入门----霍夫变换直线检测(CvHoughLine2的使用)
2015-11-04 23:41 14254上回书说道, ... -
openCV入门----霍夫变换直线检测(自写)
2015-11-03 01:05 17360最近,跟一 ... -
openCV入门----边缘检测(三):canny算法
2015-10-28 00:50 6494对于canny算法,这个应用非常广泛算法, ... -
openCV入门----边缘检测(二):拉普拉斯算子
2015-10-26 11:16 9365上文简单讲述了一阶导数在边缘检测中的应用。而使用一 ... -
openCV入门----边缘检测(一):基于一阶导数的梯度算子
2015-10-26 10:36 10612首先要了解一下梯度的概念,在高等数学中,对于连续的二维函数f ... -
openCV学习笔记----深入理解高斯滤波(二)
2015-10-23 00:52 11210这一次,我将较 ... -
openCV学习笔记----高斯滤波基本概念及简单应用(一)
2015-10-20 12:35 12488高斯滤波是图像平滑的一种重要的方式,能有效地消除 ...
相关推荐
- HighGUI:图形用户界面,用于显示图像和视频,以及读写图像文件。 - Features2D:特征检测和描述符,如SIFT、SURF、ORB等。 - Calib3D:相机标定、立体视觉、单应性等3D相关任务。 - Video:视频分析,如运动估计...
1. **库文件**:包含预编译的OpenCV库,这些库文件(.so)是针对不同Android架构(如armeabi, armeabi-v7a, x86等)的,使得应用程序能在多种硬件平台上运行。 2. **Java API**:提供了与Android兼容的Java接口,...
OpenCV(开源计算机视觉库)是一个强大的开源框架,专门用于图像处理和计算机视觉任务。...通过这个包,开发者能够轻松入门计算机视觉领域,进行图像处理和分析任务,同时也可以深入学习和研究OpenCV的各种高级功能。
1. **模块结构**:OpenCV 4.x版本进行了模块化重构,核心功能如图像处理、特征检测、机器学习等被拆分成独立的模块,便于用户按需选择和链接。 2. **DNN模块**:深度神经网络模块在OpenCV 4.1.0中得到了增强,支持...
return -1; } // 显示图片 cv::imshow("图片", image); cv::waitKey(0); // 等待用户按键,0表示无限等待 cv::destroyAllWindows(); // 关闭所有窗口 return 0; } ``` 在这个示例中,我们首先调用`imread...
OpenCV,全称为Open Source Computer Vision Library,是一个开源的计算机视觉和机器学习软件库,广泛应用于图像和视频处理。本PPT主要涵盖了OpenCV的基础知识,包括图像的读取方式、图像类型以及OpenCV贡献库的介绍...
9. OpenCV与GUI:学习如何使用OpenCV构建简单的图形用户界面(GUI),如显示图像、交互式处理等。 10. 实时处理:利用OpenCV处理视频流,进行视频分析和实时特效。 这个压缩包中的PDF很可能详细讲解了以上各个知识...
OpenCV(开源计算机视觉库)是计算机视觉和机器学习领域的一个强大工具,广泛应用于...对于大学学习交流,这个预编译的OpenCV版本降低了入门门槛,有助于学生专注于算法和应用开发,而不是花费大量时间在环境配置上。
本教程,"Intro-opencv-vadim-part-1",是Vadim的OpenCV系列入门课程的第一部分,旨在为初学者提供一个全面而深入的OpenCV学习起点。 在这一部分中,我们将重点介绍OpenCV的基本概念、安装过程以及如何使用OpenCV...
1. 图像基础:了解像素、色彩空间、图像类型等基本概念,以及OpenCV中的`Mat`数据结构。 2. 图像操作:学习如何读取、显示、保存图像,以及进行基本的图像变换,如缩放、旋转、裁剪和滤波。 3. 图像处理函数:熟悉...
这个压缩包“OpenCV3版-OpenCV3编程入门例程源代码(95个).zip”是针对初学者准备的,包含了95个使用OpenCV3编写的基础示例程序。这些实例覆盖了OpenCV3的多个核心功能,可以帮助学习者快速掌握OpenCV的基本用法,...
在学习李立宗老师的《OpenCV快速入门-面向Python》一书中,我们重点探讨了OpenCV的基础绘图和交互功能,以及K近邻(K-Nearest Neighbors,简称KNN)算法。 在第十九章“绘图及交互”中,OpenCV提供了丰富的图形绘制...
OpenCV(开源计算机视觉库)是一个广泛应用于图像处理和计算机视觉领域的强大工具。这个压缩包“opencv-4.4.0-vc14_vc15.zip”包含了OpenCV的4.4.0版本,它是针对Visual Studio 2017(vc14)和Visual Studio 2019...
而且它简单易学,初学者几个小时就可以基本入门。再加 上 Numpy 和 matplotlib 这两个翅膀, Python 对数据分析的能力不逊于 Matlab。 Python 还被称为是胶水语言,有很多软件都提供了 Python 接 口。尤其是在 linux...
1. **OpenCV核心功能**:包括图像滤波、颜色空间转换、几何变换、特征检测(如SIFT、SURF)、模板匹配、物体识别等。 2. **Android集成**:使用Android Studio,通过Gradle依赖或添加AAR库将OpenCV引入Android项目,...
- 开发者可以利用OpenCV提供的函数实现图像和视频的读取、显示、保存,以及进行诸如边缘检测、直方图均衡化、特征提取等操作。 - 通过OpenCV的机器学习库(ML),可以训练和应用分类器,如SVM、决策树等,进行对象...
这篇笔记将带你轻松入门OpenCV,探索图像处理的奥秘。 **概念概述** OpenCV的核心是处理图像,它提供了一系列的函数和类来实现各种图像操作。图像可以看作是二维数组,每个元素代表一个像素,通常用RGB(红绿蓝)...
本教程“Intro-opencv-vadim-part-2”是Vadim主讲的OpenCV入门系列的第二部分,旨在帮助初学者深入理解和掌握OpenCV的基本概念和操作。 在这一部分中,我们将主要探讨以下几个关键知识点: 1. **图像加载与显示**...
OpenCV 是一个强大的开源计算机视觉库,尤其在图像处理和计算机视觉领域有着广泛的应用。本PPT的内容聚焦于OpenCV的Python接口,主要讲解了如何使用OpenCV进行图像轮廓的检测和处理。图像轮廓在很多应用中至关重要,...