OpenCV 中的三大数据类型:IplImage 类型
前言
本文将介绍 OpenCV 中的图像结构 IplImage 并提供一些很实用的技巧。
更多的矩阵处理函数还请参阅相关资料。
IplImage 的类型定义
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[]; /* 被OpenCV忽略 */
char channelSeq[]; /* 同上 */
int dataOrder; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道.
只有cvCreateImage可以创建交叉存取图像 */
int origin; /*图像原点位置: 0表示顶-左结构,1表示底-左结构 */
int align; /* 图像行排列方式 (4 or 8),在 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[]; /* 边际结束模式, 在 OpenCV 被忽略*/
int BorderConst[]; /* 同上 */
char *imageDataOrigin; /* 指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的 */
} IplImage;
IplImage 的创建方法
创建图像函数:
IplImage* cvCreateImage( CvSize size, int depth, int channels );
size:图像大小
depth:图像深度,其格式一般为 IPL_DEPTH_<比特数>(S|U|F),比如 IPL_DEPTH_32F 就表示 32 位浮点数。
channels:图像通道数
使用 ROI 参数控制图像的处理操作
这个参数可以翻译为 "对图像感兴趣的区域" ,也就是说,当你给 IplImage 设定了这个参数以后,那么以后的图像处理函数将都只针对这个区域进行,直到撤销此参数。下面的代码设定 ROI 并将此区域的蓝色通道增加一定灰度值:
// 此头文件包含图像IO函数的声明
#include "highgui.h"
// 此头文件包含基本的图像处理函数和高级计算机视觉算法
#include "cv.h" int main (void) { IplImage *img = cvLoadImage("d:\\1.jpg"); // ROI 位置描述参数
int x = ;
int y = ;
int width = ;
int heigh = ; // 需要增加的蓝色灰度值
int add = ; // 设定 ROI
cvSetImageROI (
img, // 处理的图像
cvRect (x, y, width, heigh) // ROI 位置描述
);
// 给图像增加蓝色通道的灰度值
cvAddS (
img,// 处理的图像( 仅仅处理ROI )
cvScalar (add),// 要增加的标量
img // 输出的图像
); // 撤销 ROI
cvResetImageROI (img); // 显示处理后的图像
cvNamedWindow ("示例", CV_WINDOW_AUTOSIZE);
cvShowImage ("示例", img); // 用户键入任何按键后程序退出
cvWaitKey (); // 清理内存空间
cvReleaseImage (&img);
cvDestroyWindow ("示例"); return ;
}
运行测试
1. 将如下测试图片另存到 D 盘,命名为 "1.jpg":

2. 运行结果:

IplImage 的其他操作
请参考前面的文章 OpenCV 入门示例之一,之四,之五,以及相关资料都提供了很多基本的图像处理函数。
这些基本的函数处理不再介绍也没有必要,查阅相关资料即可,接下来将学习一些更高级的图像处理,分析技术。
OpenCV 中的三大数据类型:IplImage 类型的更多相关文章
- OpenCV 中的三大数据类型:CvMat 类型
前言 本文将介绍 OpenCV 中的矩阵结构 CvMat 并提供几个很常用的矩阵使用方法. 更多的矩阵处理函数还请参阅相关资料. CvMat 的类型定义 typedef struct CvMat { ...
- OpenCV 中的三大数据类型( 概述 )
前言 OpenCV 提供了许多封装好了的类型,而其中,以三大类型最为核心.本文将大致介绍这三大类型. CvArr:不确定数组 它可以被视为一个抽象基类,后面的两大类型都继承此类型并扩展.只要某个函数的 ...
- OpenCV中的矩阵和图像类型
任务刚刚做完,就迫不及待的来写写在OpenCV中常见的几类数据类型: 在使用OpenCV时我们时常会碰到IplImage这个数据类型,IplImage就是我们通常说的“图像”进行编码的基本结构,这些图 ...
- OpenCV——Mat、CvMat、IplImage类型浅析【转】
OpenCV中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage. 一.Mat类型:矩阵类型,Matrix. 在openCV中,Mat是一个多维的密集数据数组.可以用来处理向量和矩阵 ...
- Opencv 中透视变换函数对IplImage图像变换时出现的问题?
最近一直在做视频稳像的项目,为了简化部分实现,使用了部分Opencv的函数,其中包括Opencv中对IplImage进行同时变换的函数cvWarpPerspective(src, dst,...) 发 ...
- opencv中Mat类型数据操作与遍历
Mat作为opencv中一种数据类型常常用来存储图像,相对与以前的IplImgae类型来说,Mat类型省去了人工的对内存的分配与释放,转而自动分配释放.Mat Class主要包括两部个数据部分:一个是 ...
- opencv中VideoCapture和cvCapture有什么区别?
VideoCapture和cvCapture其实是一样的,你可以去看看源码,VideoCapture其实在内部调用了cvCapture.这是不同 版本的opencv导致的.我接触到的opencv有过一 ...
- opencv中Mat与IplImage,CVMat类型之间转换
opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...
- OpenCV中IplImage和Mat间的相互转换
OpenCV中做图像处理经常用到IplImage和Mat间的相互转换. 首先,cv::Mat是opencv2.0中的数据类型:IplImage是opencv1.0中的类型,两种类型并不相同. 1. I ...
随机推荐
- linux mmap 详解【转】
转自:http://blog.chinaunix.net/uid-20321537-id-3483405.html 一.前言mmap的具体实现以前在学习内核时学习过,但是对于其中的很多函数是一知半解的 ...
- 多线程设计模式 - Future模式
Future模式是多线程开发中非常常见的一种设计模式,它的核心思想是异步调用.这类似我们日常生活中的在线购物流程,带在购物网看着一件商品时可以提交表单,当订单完成后就可以在家里等待商品送货上门.或者说 ...
- react Native 运行报错之一 gradle-2.14.1-all解压失败的问题
在react-native run-android 时 可能出现压缩包不成功的情况,原因是压缩包失败,需要手动解压到相应目录, 目录:C:\Users\Administrator\.gradle\w ...
- Codeforces 762A k-th divisor(数论)
题目链接:k-th divisor 求出N的第K大因子,满足N <= 10^15,K <= 10^9 直接暴力…… #include <bits/stdc++.h> using ...
- 让cpu占用率曲线听你指挥(多核处理器)
编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器) [版权声明]转载请注明出处 http://www.cnblogs.com/TenosDoIt/p/3242910.html [目录] 不考 ...
- asp.net站点从2003服务器迁移到2008服务器出现定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节的问题解决
解决方法: 1.从4.0降到2.0. 2.直接删除整个节点,如下:
- Android Studio 中.android 文件夹移动默认位置
转自 开发工具打造: .android 文件夹移动默认位置 .android 文件夹是用来存放 avd 模拟器文件的文件夹. 因为默认是 C盘 的. 占用空间比较大.很不爽 将它移动到其它盘其实很简单 ...
- Openfire 4.1.2 DOWNLOADS
DOWNLOADS Source Code Openfire 4.1.2 http://www.igniterealtime.org/downloads/ http://download.ignit ...
- HM编码器代码阅读(14)——帧间预測之AMVP模式(二)predInterSearch函数
简单介绍 predInterSearch基本的工作是ME(运动预计)和MC(运动补偿). 函数中有一个bTestNormalMC变量.它表示是否进行正常的MC过程,正常的MC过程就是进 ...
- vscode Python Pylint(代码检测插件)
暑假刚开始想了解一下Python,使用vscode进行编写,根据vscode 的提示安装了一些不知道干啥的插件,编写过程中提示说 "Linter pylint is not install ...