1.origin

在使用opencv显示图像时会出现图像倒立的情况,这与IplImage的origin属性有关系。origin为0表示顶左结构,即图像的原点是左上角,如果为1为左下角。

一般从硬盘读入的图片或者通过cvCreateImage方法创建的IplImage图片默认的origin为0,即显示的时候都是正的。

而由摄像头或者视频文件获取的帧图像origin为1,此时显示的时候扫描顺序是从下到上,显示也是正的(opencv显示的时候是根据origin的值显示的,如果origin=1,则从下到上显示,否则反之)。

但是如果你自己创建了一个IplImage格式的图像img,且从帧图像中copy或者截取一部分区域进行显示的时候就会出现倒立情况。这是因为cvCreateImage方法得到的img的origin是0,而帧图像的origin为1,它会将帧图像的第i行赋值给img的第height-i行,因此就出现了倒立.解决办法是:在创建之后将origin调整为与帧图像的origin一致即可。

IplImage* face=cvCreateImage(cvSize(width,height),copy_Frame->depth,copy_Frame->nChannels);

//因为IplImage的origin=0,所以要先将face->origin改为1
        face->origin=copy_Frame->origin;//1

以前总是不知道为什么,从摄像头录入的视频帧,显示在窗口上很正常,但是用来进行数据计算时总要先垂直翻转一下。为此,在涉及图像中坐标的计算中,出过不少错。

现在终于明白了,OpenCV中的图像结构有个很重要的成员origin,它指明了图像的原点位置,可以有两种取值:IPL_ORIGIN_TL和IPL_ORIGIN_BL,其中TL意思是:TopLeft,即左上;BL意思是:BottomLeft,即左下。其实这两个都是整形常量,IPL_ORIGIN_TL就是0,IPL_ORIGIN_BL就是1。

经验证,从摄像头取回的图像的坐标原点是在左下角,即origin值是1。所以在计算前,一定要明确图像的坐标原点位置,否则就会出错。《学习OpenCV中文版》49页也特别强调了:计算机视觉领域,一个重要的错误来源就是原点位置的定义不统一。

二 imageData

ImageData指向存储图像数据的一块数据区。这块数据区虽然是被声明为char类型的,但是其也可以引用其他类型的数据。

例如声明一个图像,长宽为100,100,深度为32位的float型,灰度图像。

IplImage* Img = cvCreateImage(cvSize(100,100), IPL_DEPTH_32F, 1);

那么我们可以通过调试查看实际的内存分配空间为40000 = 100*100*(32/8)。也就是说实际上是分配了10000个float型的内存区域。

三cvcopy()函数

拷贝一个数组给另一个数组   
void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL );   
src 输入数组。  
dst 输出数组。   
mask 操作掩码是8比特单通道的数组,它指定了输出数组中被改变的元素。   
函数cvCopy从输入数组中复制选定的成分到输出数组:   如果mask(I)!=0,则dst(I)=src(I)。   如果输入输出数组中的一个是IplImage类型的话,其ROI和COI将被使用。输入输出数组必须是同样的类型、维数和大小(这一点需要特别注意)函数也可以用来复制散列数组(这种情况下不支持mask)。

转自:http://www.360doc.com/content/14/0219/10/15868697_353734375.shtml

四、CvMemStorage 类型

五:CvPoint类型

【OpenCV学习笔记】【函数学习】四(origin+imageData+cvcopy()函数+CvMemStorage 类型+CvPoint类型)相关推荐

  1. OpenCV学习笔记(十四):重映射:remap( )

    OpenCV学习笔记(十四):重映射:remap( ) 图像的坐标映射是通过原图像与目标图像之间建立一种映射关系,这种映射关系有两种,一种是计算原图像任意像素在映射后图像的坐标位置,另一种是计算变换后 ...

  2. Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示

    Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示 zouxy09@qq.com http://blog.csdn.net/zouxy09 我的Kinect开发平台是: Win7 x86 ...

  3. C++ Primer 学习笔记(第四章:表达式)

    2019独角兽企业重金招聘Python工程师标准>>> ##C++ Primer 学习笔记(第四章:表达式) [TOC] ###4.1 基础 左值和右值: 当一个对象被用作右值的时候 ...

  4. VULKAN学习笔记-inter教学四篇

    VULKAN学习笔记-inter教学四篇 --交换链相关函数:实例层 vkCreateWin32SurfaceKHR vkDestroySurfaceKHR vkGetPhysicalDeviceSu ...

  5. python数据挖掘学习笔记】十四.Scipy调用curve_fit实现曲线拟合

    #2018-03-28 10:02:08 March Wednesday the 13 week, the 087 day SZ SSMR python数据挖掘学习笔记]十四.Scipy调用curve ...

  6. 大数据HiveSQL学习笔记三-查询基础语法以及常用函数

    大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...

  7. javascript学习笔记(第四章图片库--初步了解)

    javascript学习笔记(第四章图片库–初步了解) 通过前三章的学习我们已经对这个新的语言有了一个了解,js的语法基本和C语言一致,我们可以通过调用一些document对象中的函数来对实现一些很简 ...

  8. JavaScript学习笔记(第四部分)总共四部分(完结)

    JavaScript学习笔记(第四部分)总共四部分 9 事件 9.1 事件对象 当响应函数被调用时,浏览器每次都会将一个事件对象作为实参传递进响应函数中,这个事件对象中封装了当前事件的相关信息,比如: ...

  9. 【初阶】unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流...

    [初阶]unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流 一.关于 显示分数时,如何让函数之间相互交流 这是一个非常好的逻辑问题 1 思路:主 ...

  10. Windows保护模式学习笔记(十四)—— 阶段测试

    Windows保护模式学习笔记(十四)-- 阶段测试 题目一 解题步骤 题目二 解题步骤 题目一 描述:给定一个线性地址,和长度,读取内容 int ReadMemory(OUT BYTE* buffe ...

最新文章

  1. 新手怎么学以太坊区块链开发?
  2. java之hiberante之集合映射之list映射
  3. centos7 搭建vsftpd服务并锁定用户的家目录
  4. 挖矿主板bios设置_挖矿板的核心功能是什么?竟是“BIOS”
  5. virtual多态 你不知道的事情
  6. Android开发 使用HBuilder的缓存方法
  7. 应届生从头脑风暴到游戏策划案的个人思路(二)
  8. 基于神经网络的PID控制,pid神经网络什么原理
  9. iSlide系列教程视频简介——PPT的简化神器
  10. 深入理解SD卡基础原理以及内部结构的总结
  11. SkipList A Probabilistic Alternative to Balanced Trees
  12. CentOs解压缩命令
  13. Photoshop:如何使图片覆盖在文字上以及一种海报效果实现
  14. 低碳生活进行时!国产“芯”RK3568创造智慧出行新体验
  15. 网络编程、正则表达式
  16. DevOps 面试小宝典:总有一个你会用到
  17. 北航计算机测控,材料工程计算机测控
  18. 为什么很多人辛劳一生,仍然生活在社会底层?
  19. “命令终端”的实现1-准备篇
  20. 蹒跚学步之IDEA建立个基本的Springboot项目

热门文章

  1. 20. 顺时针打印矩阵
  2. 排序算法之八 桶排序(C++版本)
  3. android 自定义加载动画效果,Android自定义加载动画-旋转的叶子
  4. java8函数式编程闭包_java8入门必备—函数式编程思维——函数式语言向语言和运行时让渡控制权的途径——迭代让位于高阶函数、闭包...
  5. jdbc mysql innodb 死锁 deadlock_Mysql InnoDB 数据更新/删除导致锁表
  6. python代码段_python代码段有哪些
  7. rust大油井频率怎么用_90%的人都不会用电吹风!用不好危害大!1分钟告诉你到底怎么用...
  8. Java进阶:微服务SpringCloud
  9. Pannellum:实例之在部分视角内展示全景图
  10. D3实战(1):力导向图