opengl&opencv坐标系讲解

2022/12/01 07:00:00 cv 共 2058 字,约 6 分钟

天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为。——《孟子·告子下》

在图形图像开发过程中,经常会用到opencv和opengl,有时候还是会搞混坐标系,导致画面上下反转。本文记录下gl和cv的坐标差异,是不是可以温习下。

坐标系统

OpenGL使用的是右手笛卡尔坐标系统,Z正轴垂直屏幕向外,X正轴从左到右,Y正轴从下到上。

img

右手定则:以右手握住z轴,当右手的四指从正向x轴以π/2角度转向正向y轴时,大拇指的指向就是z轴的正向。[左手定则同理]

世界坐标系:在现实世界中,所有的物体都具有三维特征,但计算机本身只能处理数字,显示二维的图形,将三维物体及二维数据联系在一起的唯一纽带就是坐标。为了使被显示的三维物体数字化,要在被显示的物体所在的空间中定义一个坐标系。这个坐标系的长度单位和坐标轴的方向要适合对被显示物体的描述,这个坐标系称为世界坐标系。世界坐标系是始终固定不变的。

世界坐标系以屏幕中心为原点(0, 0, 0),在OpenGL中用来描述场景的坐标。比如使用这个坐标系来描述物体及光源的位置。世界坐标系,是不会被改变的。

局部坐标系:OpenGL还定义了局部坐标系的概念,所谓局部坐标系,也就是坐标系以物体的中心为坐标原点,物体的旋转或平移等操作都是围绕局部坐标系进行的,这 时,当物体模型进行旋转或平移等操作时,局部坐标系也执行相应的旋转或平移操作。需要注意的是,如果对物体模型进行缩放操作,则局部坐标系也要进行相应的 缩放,如果缩放比例在案各坐标轴上不同,那么再经过旋转操作后,局部坐标轴之间可能不再相互垂直。无论是在世界坐标系中进行转换还是在局部坐标系中进行转 换,程序代码是相同的,只是不同的坐标系考虑的转换方式不同罢了。

视坐标系:以视点为原点,以视线方向为Z轴正方向的坐标系。OpenGL会将世界坐标系先变换到视坐标系,然后进行裁剪,只有在视见体之内的场景才会进入下一个阶段进行处理。

屏幕坐标系:计算机对数字化的显示物体作了加工处理后,要在图形显示器上显示,这就要在图形显示器屏幕上定义一个二维直角坐标系,这个坐标系称为屏幕坐标系。这个坐标系坐标轴的方向通常取成平行于屏幕的边缘,坐标原点取在左下角,长度单位常取成一个象素。

Opencv 坐标系

img

opencv 的原点位于屏幕的左上方,所以访问的时候要注意跟OpenGL的坐标系进行区分.

1) 该坐标系在诸如结构体Mat,Rect,Point中都是适用的

cols == width == Point.x;
rows == height == Point.y;

2)在使用image.at(i,j)来访问像素点的时候, i 应该为Mat的行号, j为Mat的列好, 区别与图片坐标系中的坐标。

Mat::at(Point(x,y)) == Mat::at(y,x);

参考

http://www.songho.ca/opengl/gl_projectionmatrix.html

——OpenCV——
EasyPR4Android 车牌识别
Android—基于opencv人脸检测app制作
Android—yolov3目标检测移植
ViseFace ~ 20180417
利用OpenCV实现简笔画效果
FaceCamera ~ 20190822
——OpenGL——
Android平台OpenGL SE Camera滤镜实现~20181123
Android openGl开发详解(二)-相机预览
Android基于Shader的图像处理(10)-仿抖音毛刺特效
Android OpenGL ES 9.2 位置滤镜
Pano360 360度/VR视频播放库~20180225
OpenGL Android课程一:入门
FboCamera ~ 20181023
多媒体之GL-ES战记第一集–勇者集结
OpenGL坐标变换
OpenGLES添加水印
OpenGL未来视觉-MagicCamera3实用开源库
OpenGL 矩阵变换(讲的太好了~!)
OpenGL Android课程五:介绍混合(Blending)
AndroidOpenGLTutorial ~ 20181205
OpenGL未来视觉4-Native层滤镜添加
OpenGL使用GLSurfaceView预览视频
OpenGL ES 高级进阶:坐标系及矩阵变换
opengles4android ~ 20190408
《OpenGL从入门到放弃08》相机预览,这样讲就好理解了
BubbleTextureView自定义气泡形状opengl实现 ~ 20180802
【Android 音视频开发打怪升级:OpenGL渲染视频画面篇】一、初步了解OpenGL ES
Android OpenGL ES 8.FrameBuffer离屏渲染
Android平台上使用MediaCodec, Opengl对视频进行处理
The Open Collection of GLTransitions
gl-transitions ~ 20200328
NDK_OpenGLES_3_0 ~ 20200820
FilterRenderer ~ 20180825
OpenGL 实现视频编辑中的转场效果
Category:Core API reference

文档信息

打赏一下呗

对你有帮助,那就打赏一下吧

扫码支持
扫码打赏,金额随意

相关文章

文章搜索

    Post Tags Cloud

    Table of Contents