一、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. opencv——IplImage结构

    一.作业要求: 采用MATLAB或opencv+C编程实现.每一题写明题目,给出试验程序代码,实验结果图片命名区分并作出效果比对,最后实验总结说明每一题蕴含的图像处理方法的效果以及应用场合等. 采用M ...

  2. IplImage 结构解读

    IplImage 结构解读: typedef struct _IplImage { int nSize;                              /* IplImage大小,等于wi ...

  3. IplImage 结构解读(转)

    typedef struct _IplImage { int nSize;                             /* IplImage大小 */ int ID;           ...

  4. C#调用C++系列二:传结构体

    这一篇记录下C#调用C++的结构体的方式来使用OpenCV的数据格式,这里会有两种方式,第一种是C#传一个结构体和图像的路径给C++,然后C++将图像加载进来,再把传进来的结构体填满即可,第二种是C# ...

  5. Go结构体实现类似成员函数机制

    Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...

  6. C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱

    一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...

  7. go语言结构体

    定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...

  8. C语言中的结构体

    用户自己建立自己的结构体类型 1.  定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...

  9. C++_系列自学课程_第_12_课_结构体

    #include <iostream> #include <string> using namespace std; struct CDAccount { double bal ...

随机推荐

  1. 给返回的injector增加了一个invoke方法

    我们知道,这里swap只需交换指针指向就可以,所以我们可以写出如下自定义版本的swap函数: 首先,它把一个独立的文件看成一个模块,比如上面的 hello.js 文件,就可以当成一个模块.模块的名称就 ...

  2. 使用php-cs-fixer格式化你的代码

    在开发中,我们会有意识的遵行一套规范来保证团队代码的一致性.PSR是我们PHP遵循的共同规范. 在这里,推荐一个代码格式化工具php-cs-fixer,可以一键把代码格式化为PSR-2的标准. 安装: ...

  3. [NOI 2006] 最大获利 80分

    最后两点怎么搞都要30s+,但是我不会什么优化啊…暂时就这样吧.Dinic的时间复杂度是O(N^2*M) 这题和TDL的幼儿园模板是一样的. 这次写网络流给自己计时了,大约是40min左右,后来都跑去 ...

  4. 使用GridVIew显示Gantt(甘特图),动态增减列

    说明:本例是做了工厂的排机报表 一.根据查询日期初始化GridView列 private void IniGridView(DateTime p_DateS,DateTime p_DateE) { / ...

  5. Leetcode 给一个数a和一个向量b,找出该向量b中的2个数相加等于a,并输出这两个数在向量中的位置

    看C++primer Plus看的无聊,第一次做Leetcode的练习,本来想做二维向量的,结果始终通不过,查了原因,必须用一维的... 一维的答案: class Solution {  public ...

  6. 火狐和IE浏览器的兼容问题汇总

    1.window.event code=(navigator.appName="Netscape")?event.which:event.keycode; 2.event.x mx ...

  7. java.io.IOException: Cannot run program "jad"

    今天调试google tag manager, 需要看看google analytics source code,无奈没有源码,装个一个插件ejad 还是不行: java.io.IOException ...

  8. php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名

    <?php // 读取网页源码$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLO ...

  9. 如何用vs2010打开vs2013的项目?

    众所周知,用vs2013打开vs2010十分简单,无须做什么. 从VS2010开始,不再制作专有的文件格式,这只是一个xml格式的文本文件,其中决定了解决方案的平台工具集和VS版本. 既然.sln只是 ...

  10. swift 闭包循环引用

    当使用闭包时,类本身持有self,然后又在闭包中访问了self或者self的属性,就会导致恶心额循环引用.swift提供的解决方法是在闭包中定义捕获列表,捕获列表是闭包想怎么引用捕获来的变量.例如下面 ...