一、IplImage的一些重要成员:

1、origin:图像原点的定义。=0,则图片的左上角是原点;=1,则左下角是原点。                                                                   IplImage* img=cvLoadImage("图片路径");                                                                            img->origin=0,1;

2、depth:图像颜色深度,有6种取值

3、widthStep:一行的字节数

6、nChannels:图像的通道数,(B,G,R),一个像素点对应3个值(B,G,R);

二、访问图像像素点:

imageData是图像的起始地址:                                                                       IplImage* img;                                                                                                                     usigned char* prow=(usigned char*) (img->imageData+y*img->widthStep);       //prow指针指向图像img第y行的起始地址

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"

int main(int argc, char* argv[])
{
IplImage *img=cvLoadImage("E:\\大四上\\openCV\\水果\\1.jpg",2|4);
IplImage *b_img=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1); //b通道图像
IplImage *g_img=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1); //g通道图像
IplImage *r_img=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1); //r通道图像*/
int y,x;
for(y=0;y<img->height;y++)
{
unsigned char* prow=(unsigned char*)(img->imageData+y*img->widthStep);
unsigned char* b_prow=(unsigned char*)(b_img->imageData+y*b_img->widthStep);
unsigned char* g_prow=(unsigned char*)(g_img->imageData+y*g_img->widthStep);
unsigned char* r_prow=(unsigned char*)(r_img->imageData+y*r_img->widthStep);
for(x=0;x<img->width;x++)
{
b_prow[x]=prow[x*3+0];
g_prow[x]=prow[x*3+1];
r_prow[x]=prow[x*3+2];

}
}

cvNamedWindow("img");
cvNamedWindow("b_img");
cvNamedWindow("g_img");
cvNamedWindow("r_img");

cvShowImage("img",img);
cvShowImage("b_img",b_img);
cvShowImage("g_img",g_img);
cvShowImage("r_img",r_img);
cvWaitKey(0);

return 0;
}

结果截图:

三、ROI:在一幅图像中,感兴趣的区域(一个矩形区域)

  对图像设置ROI区域的方法:cvSetImageROI(img,rect);   //img是图像,rect是矩形区域

  取消ROT区域:cvResetImageROI(img);

  把img2添加到img1这幅图像上:cvCopy(img2,img1);在用的时候,必须保证两幅图像的格式相同,并且同为彩色图像或灰度图像

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"

int main(int argc, char* argv[])
{
IplImage* img1=cvLoadImage("E:\\大四上\\openCV\\水果\\苹果.png");
IplImage* img2=cvLoadImage("E:\\大四上\\openCV\\水果\\梨.png");

CvRect rect=cvRect( 40, 25, img2->width, img2->height); //矩形
cvSetImageROI(img1,rect); //对图像设置ROI区域
cvNamedWindow("img1");
cvCopy(img2,img1); //把img2复制到img1上面
cvResetImageROI(img1); //取消ROI区域
cvShowImage("img1",img1);
cvWaitKey(0);
return 0;
}

IplImage结构体相关推荐

  1. 对IplImage 结构体的理解

    1 typedef struct _IplImage 2 { 3 int nSize; /* IplImage大小 */ 4 int ID; /* 版本 (=0)*/ 5 int nChannels; ...

  2. Study notes for OpenCV——第八节 CvMat结构体与矩阵的创建

    一.数据类型CvMat CvMat与IplImage的关系就如同C++中的继承关系,IplImage可以视为从CvMat派生的.CvArr可以视为抽象类. 二.CvMat矩阵结构 首先我们要知道Ope ...

  3. Gin 框架学习笔记(02)— 参数自动绑定到结构体

    参数绑定模型可以将请求体自动绑定到结构体中,目前支持绑定的请求类型有 JSON .XML .YAML 和标准表单 form数据 foo=bar&boo=baz 等.换句话说,只要定义好结构体, ...

  4. Go 知识点(04)— 结构体字段转 json格式 tag 标签的作用

    我们知道在 Go 语言中无论是变量.常量还是函数,对于首字母大小写有不同的处理. 首字母大写,标志着该字段或者函数是能导出的,也就是可以被其它包所能访问的: 首字母小写,标志着该字段是私有的,只能在本 ...

  5. 【C#】枚举_结构体_数组

    最近看C#视频,关于这部分,先看了一遍,又照着敲了一遍,自己敲的过程发现了一些有意思的东西. 枚举:定义一个枚举类型的变量,这个变量有很多相同类型的值.比如性别Gender这个变量可以有男和女这两个值 ...

  6. C++ 结构体struct 的使用

    结构体是什么 结构体是一种有开发者定义的数据类型,以容纳许多不同的数据值 结构体的注意事项: 声明结构体的方式和声明类的方式大致相同,其区别如下: 使用关键字 struct 而不是关键字 class. ...

  7. C语言结构体篇 结构体

    在描述一个物体的属性的时候,单一的变量类型是无法完全描述完全的.所以有了灵活的结构体变量. 结构体变量从意义上来讲是不同数据类型的组合,从内存上来讲是在一个空间内进行不同的大小划分. 1.1 结构体类 ...

  8. 33. 使用fread()/fwrite()往文件中写入结构体,从文件中读出结构体

    1 //读写结构体 2 #include <stdio.h> 3 typedef struct student 4 { 5 int num; 6 char name[30]; 7 char ...

  9. Linux 准确查找结构体定义位置

    例如:查找文件操作结构体 struct file_operations, 使用转移符 "\" $ grep struct\ file_operations\ { kernel/in ...

  10. Go 学习笔记(33)— Go 自定义类型 type(自定义结构体、结构体初始化、结构体内嵌、自定义接口)

    1. 自定义类型格式 用户自定义类型使用关键字 type ,其语法格式是: type newType oldType oldType 可以是自定义类型.预声明类型.未命名类型中的任意一种. newTy ...

最新文章

  1. Vue.js框架简单读取数据库信息并渲染完成news新闻文章列表以及detail详情页功能(小试牛刀)
  2. 项目管理5大过程组,42个过程一句话讲解
  3. proto buffer
  4. PHP系统编程--01.多进程与多线程
  5. 解决问题ImportError: HDFStore requires PyTables, quot;No module named 'tables'quot; problem importing
  6. 算法与数据结构_数据结构与算法专题--算法基本概念
  7. hibernate关系映射(一对一)
  8. 正则基础之——\b 单词边界
  9. Java 多线程 —— 深入理解 volatile 的原理以及应用
  10. kali使用笔记本自带无线网卡_无线网卡?那是什么?
  11. 虚拟机无法接受组播消息_基于UDP的组播通信
  12. Codeforces 437D 贪心+并查集
  13. 获取iview中表单组件Table的选中数据
  14. Symmetric Tree (101)
  15. ROS中阶笔记(四):机器人仿真—Gazebo物理仿真环境搭建(重点)
  16. IntelliJ IDEA如何修改背景颜色样式
  17. OpenStack互操作性认证 为何有UnitedStack?
  18. hive 建表_大数据面试必备 | Hive数据仓工具面试题!
  19. 数据库系统概论-数据库设计
  20. 作品发布:挖金子修订版源码和文档

热门文章

  1. Linux安装jellyfin硬件加速,jellyfin 10.4.3之后无法硬解的解决方法
  2. 集训模拟赛改题及总结(7月part)
  3. PYTHON混淆器 pyobfuscate
  4. kudu之tablet设计原理
  5. 关于淘宝出售的杀毒软件激活码
  6. 卡巴斯基半年激活码免费申请
  7. [4G5G专题-59]:L3 RRC层-RRC层概述与总体架构、ASN.1消息、无线承载SRB, DRB、终端三种状态、MIB, SIB,NAS消息类型
  8. 细说.NET中的多线程 (六 使用MemoryBarrier,Volatile进行同步)
  9. 优米网:20部电影,哈佛商学院学生必看   下载地址
  10. 开根号的笔算算法图解_用笔算开根号