我想将Jpeg图像(其坐标(x,y))转换为圆柱坐标.
opencv中是否有可以直接执行此操作的功能?或者我可以用opencv中的哪些函数来创建自己的函数?
我在2d坐标,3d坐标和圆柱坐标之间感到困惑..有人可以简单地讨论这个吗?
有没有可用于将2d转换为3d的数学算法?2d到圆柱坐标?3d到圆柱坐标?
我阅读了关于这个主题的上一篇文章但是不理解它.
我没有参加图像处理课程,但我急于阅读书籍.我通过经验和学习其他程序员代码来学习..所以源代码将非常感激..
感谢大家,对不起我的小学发帖,
我正在从这个scratchpixel学习openGL ,这里是透视项目矩阵章节的引用:
摄像机沿世界坐标系负z轴指向,这样当一个点从世界空间转换到摄像机空间(然后从摄像机空间转换到屏幕空间)时,如果该点位于世界坐标系的左侧y轴,它也会映射到摄像机坐标系y轴的左侧.换句话说,当世界坐标系x轴也指向右边时,我们需要摄像机坐标系的x轴指向右边; 并且唯一可以获得该配置的方法是让相机向下看负z轴.
我认为这与镜像有关?但是这个解释让我很困惑...为什么默认情况下相机的坐标与世界坐标不一致(就像我们在openGL中创建的每个其他3D对象一样)?我的意思是,我们需要使用变换矩阵来转换相机坐标(无论我们想要什么,负z设置,我们都可以模拟它)...为什么要这么麻烦?
我正在尝试使用键盘来旋转一个装满小立方体的"立方体",这种键盘可以工作但不是很好.
我正在努力将旋转点设置到大"立方体"/世界的中心.正如你在这个视频中看到的那样,大立方体的前(初始)面的中心是我现在旋转的枢轴点,当我稍微旋转世界时,这有点令人困惑.
为了更好地解释它,当我使用键来旋转立方体时,看起来我正在移动立方体的初始面.因此从这个角度来看枢轴点可能没问题,但我的代码有什么问题?我不明白为什么它正在前面移动,而不是整个立方体的中心?
在生成所有小立方体的情况下,我调用3 for for循环(x,y,z)中的函数,然后函数返回,cubeMat
因此我可以在视频中看到所有生成的多维数据集.
cubeMat = scale(cubeMat, {0.1f, 0.1f, 0.1f});
cubeMat = translate(cubeMat, {positioning...);
Run Code Online (Sandbox Code Playgroud)
对于旋转本身,向左旋转的简短示例如下所示:
mat4 total_rotation; //global variable - never resets
mat4 rotation; //local variable
if(keysPressed[GLFW_KEY_LEFT]){
timer -= delta;
rotation = rotate(mat4{}, -delta, {0, 1, 0});
}
... //rest of key controls
total_rotation *= rotation;
Run Code Online (Sandbox Code Playgroud)
在这3个周期内也是这样的:
program.setUniform("ModelMatrix", total_rotation * cubeMat);
cube.render();
Run Code Online (Sandbox Code Playgroud)
我已经读过我应该使用transformation
枢轴点设置到中间但是在这种情况下,我如何设置位于世界中心的小立方体内的枢轴点?那个立方体显然是x=2, y=2, z=2
因为在循环中,我生成立方体从开始x=0
.
我正在尝试将深度图像 (RGBD) 转换为 3d 点云。我目前使用的解决方案来自这篇文章,其中:
cx
= 图像中心高度cy
= 图像中心宽度fx
和fy
= 250
,通过迭代几个选项来选择深度测量是从针孔相机拍摄的,点云从中心向外投射(下面的示例图像)。谁能帮助我理解为什么以及如何解决这个问题?
我正在使用OpenTK,我希望能够在Z是特定数字的情况下渲染多边形和纹理像素完美,投影中的任何其他位置都无关紧要(这适用于UI).有没有办法设置这样做的投影矩阵?
有没有办法从视图投影矩阵中检索相机原点/位置?(OpenGL)
我正在尝试绘制相机的截锥体,并且计算远平面和近平面的角没有问题。
但我不知道如何检索代表相机原点的点。
我期望通过乘以同质剪切空间坐标来检索它:
glm::vec4(0.f, 0.f, 0.f, 1.f)
Run Code Online (Sandbox Code Playgroud)
但我发现有点像~倒置的相机位置。(在屏幕截图中标记为X)包含以下所有源代码。
// Homogeneous points for source cube in clip-space.
std::array<glm::vec4, 9> corners =
{
// Far plane
glm::vec4(-1.f,-1.f, 1.f, 1.f), // bottom-left
glm::vec4( 1.f,-1.f, 1.f, 1.f), // bottom-right
glm::vec4( 1.f, 1.f, 1.f, 1.f), // top-right
glm::vec4(-1.f, 1.f, 1.f, 1.f), // top-left
// Near plane
glm::vec4(-1.f,-1.f,-1.f, 1.f), // bottom-left
glm::vec4( 1.f,-1.f,-1.f, 1.f), // bottom-right
glm::vec4( 1.f, 1.f,-1.f, 1.f), // top-right
glm::vec4(-1.f, 1.f,-1.f, 1.f), // top-left
// Camera/screen center …
Run Code Online (Sandbox Code Playgroud) 我在C++ Visual Studio 2008 Forms应用程序中使用OpenGL,当bool设置为true/false时,我希望GLcontrol在3D和2D之间切换.
3D绘图工作正常,2D绘图工作正常,从一个切换到另一个时出现问题.因此,如果我在2D中启动应用程序绘图,它可以完美地运行并且与3D相同,但是如果我在运行时更改布尔值则不会绘制任何内容.
这是我从一个变为另一个的代码.
if(opciones->draw3D){
GL::MatrixMode(MatrixMode::Modelview);
GL::LoadIdentity();
GL::Viewport(0, 0, w, h);
Matrix4 lookat = Matrix4::LookAt(100, 100, 100, 0, 0, 0, 0, 0, 1);
GL::LoadMatrix(lookat);
GL::Scale(this->zoom, this->zoom, this->zoom);
GL::Rotate(xrot, 1.0f, 0.0f, 0.0f);
GL::Rotate(yrot, 0.0f, 1.0f, 0.0f);
GL::Clear(ClearBufferMask::ColorBufferBit | ClearBufferMask::DepthBufferBit);
GL::ClearColor(Color::LightGray);
// Draw3D
}
else {
GL::MatrixMode(MatrixMode::Projection);
GL::LoadIdentity();
GL::Ortho(5, w-5, 5, h-5, -1, 1);
GL::Viewport(5, 5, w-5, h-5);
GL::Clear(ClearBufferMask::ColorBufferBit|ClearBufferMask::DepthBufferBit);
GL::ClearColor(Color::LightGray);
GL::MatrixMode(MatrixMode::Modelview);
GL::LoadIdentity();
// Draw 2D
}
Run Code Online (Sandbox Code Playgroud)
我不知道我做错了什么,但我想我不清楚某些矩阵或其他东西,因为正如我之前所说的那样,变量draw3D==true
在开始时它完美地绘制,当变量draw3D==false
在开始时它完全绘制在2D中,但运行时的更改使其无法正常工作.
是否可以确定OpenGL使用的当前矩阵模式?
例如,我目前有以下内容(由窗口调整大小触发):
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-width, width, -height, height, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)
但是,最好返回先前使用的矩阵模式,而不是假设GL_MODElVIEW
.是否有预先调用的函数来存储以前的状态?
我一直在编写一个程序来使用 OpenGL 显示 3D 模型,到目前为止我一直使用正交投影,但我想切换到透视投影,以便当相机朝向模型时,它看起来会变大。我知道我必须将三个矩阵(模型、视图和投影)相乘才能正确应用所有转换。正如您在下面的代码中看到的,我尝试这样做,并且能够正确创建模型和查看矩阵。我知道这些工作正常,因为当我将模型和视图投影相乘时,我可以旋转和平移对象,以及更改相机的位置和角度。我的问题是,当我将该乘积乘以投影矩阵时,我无法再在屏幕上看到该对象。
\n\n这里相机结构的默认值是 {0,0,-.5},但我使用键盘操纵该值来移动相机。
\n\n我正在使用 GLFW+glad,linmath.h
用于矩阵数学。
//The model matrix controls where the object is positioned. The\n //identity matrix means no transformations.\n mat4x4_identity(m);\n //Apply model transformations here.\n\n //The view matrix controls camera position and angle.\n vec3 eye={camera.x,camera.y,camera.z};\n vec3 center={camera.x,camera.y,camera.z+1};\n vec3 up={0,1,0};\n mat4x4_look_at(v,eye,center,up);\n\n //The projection matrix flattens the world to 2d to be rendered on a\n //screen.\n mat4x4_perspective(p, 1.57, width/(float)height, 1,10); //FOV of 90\xc2\xb0\n //mat4x4_ortho(p, -ratio, ratio, -1.f, 1.f, 1.f, -1.f);\n\n //Apply the transformations. …
Run Code Online (Sandbox Code Playgroud) 我有一个具有一定投影矩阵的透视相机,我只想从中提取流、近平面和远平面。我知道 Three.js 中有一个函数:
.updateProjectionMatrix()
Run Code Online (Sandbox Code Playgroud)
它根据上面列出的参数创建一个投影矩阵,基本上我想要相反的过程。
我正在读一些关于计算机视觉的论文.这看起来像一个简单的事实,但我无法理解.它是关于用于平面投影变换的同质[3×3]矩阵.据说它有八个独立的矩阵元素比例.我不知道比率是多少,八个独立比率是多少?请帮我解决这个问题.
谢谢.
computer-vision matrix-vision homogenous-transformation projection-matrix
我想在3d世界中实现盒子选择.基本上,单击,按住鼠标,然后取消鼠标,获取一个框,然后选择框.首先,我想弄清楚如何获得3d中点击的坐标.
我有raypicking,那是没有得到正确的坐标(得到起源和方向).无论屏幕的X/Y是什么(尽管方向不同),它都会保持返回相同的原点.
我也尝试过:
D3DXVECTOR3 ori = D3DXVECTOR3(sx, sy, 0.0f);
D3DXVECTOR3 out;
D3DXVec3Unproject(&out, &ori, &viewPort, &projectionMat, &viewMat, &worldMat);
Run Code Online (Sandbox Code Playgroud)
它得到了同样的东西,无论坐标是什么,坐标都非常接近(并且是错误的).这几乎就像是回归眼睛,而不是真实的世界坐标.
如何使用directx 9c将2D屏幕坐标转换为3d?
opengl ×7
3d ×3
c++ ×2
glm-math ×2
graphics ×2
depth ×1
directx ×1
frustum ×1
geometry ×1
glfw ×1
image ×1
javascript ×1
opencv ×1
orthographic ×1
perspective ×1
point-clouds ×1
python ×1
raytracing ×1
rotation ×1
three.js ×1
vb.net ×1