`

openCV入门1------显示图像

阅读更多
    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&#91;4&#93;; /* 被OpenCV忽略 */
char channelSeq&#91;4&#93;; /* 同上 */
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&#91;4&#93;; /* 边际结束模式, 在 OpenCV 被忽略*/
int BorderConst&#91;4&#93;; /* 同上 */
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指针


那么上述程序就很容易解释了!
1
1
分享到:
评论

相关推荐

    opencv-4.8.1-windows.exe

    - HighGUI:图形用户界面,用于显示图像和视频,以及读写图像文件。 - Features2D:特征检测和描述符,如SIFT、SURF、ORB等。 - Calib3D:相机标定、立体视觉、单应性等3D相关任务。 - Video:视频分析,如运动估计...

    OpenCV-2.4.2-android-sdk.zip

    1. **库文件**:包含预编译的OpenCV库,这些库文件(.so)是针对不同Android架构(如armeabi, armeabi-v7a, x86等)的,使得应用程序能在多种硬件平台上运行。 2. **Java API**:提供了与Android兼容的Java接口,...

    OpenCV-2.3.1-win-superpack.exe

    OpenCV(开源计算机视觉库)是一个强大的开源框架,专门用于图像处理和计算机视觉任务。...通过这个包,开发者能够轻松入门计算机视觉领域,进行图像处理和分析任务,同时也可以深入学习和研究OpenCV的各种高级功能。

    opencv-4.1.0-vc14_vc15.rar

    1. **模块结构**:OpenCV 4.x版本进行了模块化重构,核心功能如图像处理、特征检测、机器学习等被拆分成独立的模块,便于用户按需选择和链接。 2. **DNN模块**:深度神经网络模块在OpenCV 4.1.0中得到了增强,支持...

    Opencv入门操作---导入与存储图片

    return -1; } // 显示图片 cv::imshow("图片", image); cv::waitKey(0); // 等待用户按键,0表示无限等待 cv::destroyAllWindows(); // 关闭所有窗口 return 0; } ``` 在这个示例中,我们首先调用`imread...

    学习总结(OpenCV入门1-11章).pptx

    OpenCV,全称为Open Source Computer Vision Library,是一个开源的计算机视觉和机器学习软件库,广泛应用于图像和视频处理。本PPT主要涵盖了OpenCV的基础知识,包括图像的读取方式、图像类型以及OpenCV贡献库的介绍...

    OpenCV图像处理-小案例实战课程配套PDF.7z

    9. OpenCV与GUI:学习如何使用OpenCV构建简单的图形用户界面(GUI),如显示图像、交互式处理等。 10. 实时处理:利用OpenCV处理视频流,进行视频分析和实时特效。 这个压缩包中的PDF很可能详细讲解了以上各个知识...

    opencv_python-4.1.0.25-cp37-cp37m-linux_armv7l.rar

    OpenCV(开源计算机视觉库)是计算机视觉和机器学习领域的一个强大工具,广泛应用于...对于大学学习交流,这个预编译的OpenCV版本降低了入门门槛,有助于学生专注于算法和应用开发,而不是花费大量时间在环境配置上。

    Intro-opencv-vadim-part-1

    本教程,"Intro-opencv-vadim-part-1",是Vadim的OpenCV系列入门课程的第一部分,旨在为初学者提供一个全面而深入的OpenCV学习起点。 在这一部分中,我们将重点介绍OpenCV的基本概念、安装过程以及如何使用OpenCV...

    opencv3编程入门 勘误及配套源码 opencv3 OpenCV3-Intro-Book-Src-master

    1. 图像基础:了解像素、色彩空间、图像类型等基本概念,以及OpenCV中的`Mat`数据结构。 2. 图像操作:学习如何读取、显示、保存图像,以及进行基本的图像变换,如缩放、旋转、裁剪和滤波。 3. 图像处理函数:熟悉...

    OpenCV3版-OpenCV3编程入门例程源代码(95个).zip

    这个压缩包“OpenCV3版-OpenCV3编程入门例程源代码(95个).zip”是针对初学者准备的,包含了95个使用OpenCV3编写的基础示例程序。这些实例覆盖了OpenCV3的多个核心功能,可以帮助学习者快速掌握OpenCV的基本用法,...

    学习总结(OpenCV入门19-23章).pptx

    在学习李立宗老师的《OpenCV快速入门-面向Python》一书中,我们重点探讨了OpenCV的基础绘图和交互功能,以及K近邻(K-Nearest Neighbors,简称KNN)算法。 在第十九章“绘图及交互”中,OpenCV提供了丰富的图形绘制...

    opencv-4.4.0-vc14_vc15.zip

    OpenCV(开源计算机视觉库)是一个广泛应用于图像处理和计算机视觉领域的强大工具。这个压缩包“opencv-4.4.0-vc14_vc15.zip”包含了OpenCV的4.4.0版本,它是针对Visual Studio 2017(vc14)和Visual Studio 2019...

    OpenCV-Python-Toturial-中文版.pdf

    而且它简单易学,初学者几个小时就可以基本入门。再加 上 Numpy 和 matplotlib 这两个翅膀, Python 对数据分析的能力不逊于 Matlab。 Python 还被称为是胶水语言,有很多软件都提供了 Python 接 口。尤其是在 linux...

    opencv-4.2.0-android-sdk

    1. **OpenCV核心功能**:包括图像滤波、颜色空间转换、几何变换、特征检测(如SIFT、SURF)、模板匹配、物体识别等。 2. **Android集成**:使用Android Studio,通过Gradle依赖或添加AAR库将OpenCV引入Android项目,...

    OpenCV-2.2.0-win开源图形开发利器

    - 开发者可以利用OpenCV提供的函数实现图像和视频的读取、显示、保存,以及进行诸如边缘检测、直方图均衡化、特征提取等操作。 - 通过OpenCV的机器学习库(ML),可以训练和应用分类器,如SVM、决策树等,进行对象...

    OpenCV轻松入门-笔记1

    这篇笔记将带你轻松入门OpenCV,探索图像处理的奥秘。 **概念概述** OpenCV的核心是处理图像,它提供了一系列的函数和类来实现各种图像操作。图像可以看作是二维数组,每个元素代表一个像素,通常用RGB(红绿蓝)...

    Intro-opencv-vadim-part-2

    本教程“Intro-opencv-vadim-part-2”是Vadim主讲的OpenCV入门系列的第二部分,旨在帮助初学者深入理解和掌握OpenCV的基本概念和操作。 在这一部分中,我们将主要探讨以下几个关键知识点: 1. **图像加载与显示**...

    学习总结(OpenCV入门12-18章).pptx

    OpenCV 是一个强大的开源计算机视觉库,尤其在图像处理和计算机视觉领域有着广泛的应用。本PPT的内容聚焦于OpenCV的Python接口,主要讲解了如何使用OpenCV进行图像轮廓的检测和处理。图像轮廓在很多应用中至关重要,...

Global site tag (gtag.js) - Google Analytics