小编Myx*_*Myx的帖子

ffmpeg将avi分成具有已知帧速率的帧

我在此相关主题下发布了此评论.然而,他们似乎没有注意到=(

我用过

ffmpeg -i myfile.avi -f image2 image-%05d.bmp
Run Code Online (Sandbox Code Playgroud)

分成myfile.avi存储为.bmp文件的帧.它似乎工作除了不完全.在录制我的视频时,我以一定的速度录制,1000fps视频结果很2min29sec长.如果我的数学是正确的,整个视频总共应该有149,000帧.但是,当我跑

ffmpeg -i myfile.avi -f image2 image-%05d.bmp
Run Code Online (Sandbox Code Playgroud)

我只获得了4472个文件.我怎样才能获得原始的149k帧?

我还尝试将原始AVI的帧速率转换为1000fps

ffmpeg -i myfile.avi -r 1000 otherfile.avi
Run Code Online (Sandbox Code Playgroud)

但这似乎并没有解决我的担忧.

linux ffmpeg image-processing

21
推荐指数
2
解决办法
4万
查看次数

射线盒交叉理论

我想确定光线和盒子之间的交点.该框由其最小3D坐标和最大3D坐标定义,并且光线由其原点和它指向的方向定义.

目前,我正在为盒子的每个面形成一个平面,我正在将光线与平面相交.如果光线与平面相交,那么我检查交叉点是否实际位于框的表面上.如果是这样,我检查它是否是此光线的最近交点,并返回最近的交点.

我检查平面交叉点是否在盒子表面上的方式是通过一个函数

bool PointOnBoxFace(R3Point point, R3Point corner1, R3Point corner2)
{
  double min_x = min(corner1.X(), corner2.X());
  double max_x = max(corner1.X(), corner2.X());
  double min_y = min(corner1.Y(), corner2.Y());
  double max_y = max(corner1.Y(), corner2.Y());
  double min_z = min(corner1.Z(), corner2.Z());
  double max_z = max(corner1.Z(), corner2.Z());
  if(point.X() >= min_x && point.X() <= max_x && 
     point.Y() >= min_y && point.Y() <= max_y &&
     point.Z() >= min_z && point.Z() <= max_z)
     return true;

  return false;
}
Run Code Online (Sandbox Code Playgroud)

哪个corner1是该框面的矩形的一角,corner2是对面的角.我的实现大部分时间都在工作,但有时它给了我错误的交集.请看图片:

替代文字

图像显示来自相机眼睛并撞击盒子表面的光线.其他光线是盒子表面的法线.可以看出,特别是一条光线(它实际上是看到的法线)从盒子的"背面"出来,而法线应该从盒子的顶部出来.这似乎很奇怪,因为有多个其他光线正确地击中了盒子的顶部.

我想知道我正在检查交叉点是否在盒子上的方式是正确的还是我应该使用其他算法.

谢谢.

algorithm 3d raytracing intersection

20
推荐指数
1
解决办法
1万
查看次数

如何将对插入地图

我有以下地图结构:map < pair < int,int >, object* >我希望插入其中.

我怎么做,因为我试图插入一对和一个对象,我必须从中做出一对

我应该使用make_pair()我拥有的对和对象创建一对新对吗?如果是的话,你能告诉我怎么做吗?

c++ insert map

12
推荐指数
2
解决办法
5万
查看次数

glui/usr/bin/ld:找不到-lXmu

我已经下载了最新的GLUI 源代码,现在我正在尝试编译它.当我这样做时,我收到以下错误:

g++ -O0 -Wall -pedantic -I./ -I./include -I/usr/X11R6/include -o bin/example1 example/example1.cpp  -L./lib -lglui -L/usr/X11R6/lib/libXdmcp.a -lglut -lGLU -lGL -lXmu -lXext -lX11 -lXi -lm
/usr/bin/ld: cannot find -lXmu
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

当我做了一个locate libXmu,我得到以下输出:

> %:~/src/GLUI/src$ locate libXmu 
> /usr/lib/libXmu.so.6
> /usr/lib/libXmu.so.6.2.0
> /usr/lib/libXmuu.so.1
> /usr/lib/libXmuu.so.1.0.0
Run Code Online (Sandbox Code Playgroud)

我是否收到错误,因为我没有/usr/lib/libXmu.so?如果是这种情况,我该怎么做?(我根本没有链接经验).

谢谢!

linux ubuntu linker makefile ld

11
推荐指数
2
解决办法
1万
查看次数

光流的简单情况

将军:我希望我要描述的用例是一个光流问题的简单案例,因为我对这个问题没有太多的了解,我想知道是否有人对我如何有任何建议可以解决我的问题.

我已经完成的研究:我已经开始阅读基于翘曲理论的高精度光流估计,并计划查看粒子视频论文.我找到了光流的MATLAB 高精度光流实现.然而,论文(和代码)似乎描述了非常复杂的概念,可能需要大量时间来深入挖掘和理解.我希望我的问题的解决方案可能更简单.

问题:我有一系列图像.图像描绘了材料破损过程,其中材料和背景是黑色的,裂缝是白色的.我有兴趣反过来遍历图像序列,试图将破损过程中形成的所有裂缝映射到第一个黑色图像.您可以将材料视为一个大型拼图,我试图将它们按照它们破坏的相反顺序重新组合在一起.

在每个图像中,可能会出现一些刚刚出现的裂缝和/或一些已完全形成的裂缝(从而形成碎片).在整个破损过程中,一些碎片可能会分离并进一步破碎.片段也可以彼此远离移动(后续帧之间的变化很小).

期望的输出:序列中的所有裂缝/线都映射到序列中的第一个图像.

附加说明:图像以灰度格式(即原始格式)以及二进制格式提供,其中裂缝以白色轮廓,背景为完全黑色.请参阅下面的一些图像示例.

orig_img1 orig_img2 orig_img3

binary_img1 binary_img2 binary_img3

顶行显示原始图像,底行显示二进制图像.正如您所看到的,随着图像序列的进展,沿着中间向下的裂缝变得越来越宽.因此,底部裂缝与下部裂缝一起移动.当反向遍历序列时,我希望通过算法实现中间裂缝合为一体(并将其正确映射到第一幅图像),并正确映射底部裂缝,保持其正确的对应关系(大小和位置)与底部片段.

一个序列通常包含大约30~40个图像,所以我刚刚显示了初始子集.此外,尽管这些图像没有显示,但是特定图像可能仅包含裂缝的开始(即其初始外观),并且在随后的图像中,它变得越来越长并且可能与其他裂缝结合.

语言:虽然没有必要,但我想使用MATLAB实现解决方案(因为大多数与项目相关的其他代码都是在MATLAB中完成的).但是,如果OpenCV可能更容易,我的语言/库使用灵活.

任何想法都非常感谢.

matlab opencv image image-processing opticalflow

11
推荐指数
1
解决办法
1899
查看次数

vim-latex配置

我使用我的ubuntu的synaptic包管理器安装了vim-latex软件包.我按照这里的说明编辑我的.vimrc文件.但是,当我在vim中打开一个.tex文件时,出现了新的菜单选项,我似乎无法使用\ ll编译文档.我做错了什么?

vim latex

8
推荐指数
1
解决办法
3270
查看次数

给定摄像机和视图平面的2D点的3D坐标

我希望通过观察平面从相机产生光线.为了做到这一点,我需要我的相机位置("眼睛"),向上,向右和向向量(其中朝向是相机在相机所看到的物体方向上的向量)和P,观察平面上的点.一旦我有这些,产生的光线是:

ray = camera_eye + t*(P-camera_eye);
Run Code Online (Sandbox Code Playgroud)

其中t是沿光线的距离(假设现在t = 1).

我的问题是,如果它位于观察平面上的位置(i,j),我如何获得点P的3D坐标?假设给出了观察平面的左上角和右下角.

注意:观察平面实际上并不是一个平面,因为它不会在所有方向上无限延伸.相反,人们可能会将此平面视为宽度x高度图像.在x方向上,范围是0 - >宽度,在y方向上,范围是0 - >高度.我希望找到第(i,j)个元素的3D坐标,0

c++ geometry trigonometry raytracing

7
推荐指数
1
解决办法
2353
查看次数

在圆柱/圆锥上均匀生成3D点

我希望随机均匀地在圆柱体和圆锥体上生成点(单独).圆柱体由其中心,半径和高度限定.锥体的规格相同.我能够得到每个形状的边界框,所以我想在边界框内生成点.但是,我不知道如何将它们投射到圆柱/圆锥上或者这是最好的想法.

有什么建议?

谢谢.

opengl 3d geometry trigonometry particles

7
推荐指数
1
解决办法
4930
查看次数

OpenGL渲染与自己的Phong照明实现

我已经使用以(0,0,0)为中心并直接观察球体原始的相机实现了Phong照明方案.以下是场景文件的相关内容,用于使用OpenGL查看场景以及使用我自己的实现渲染场景:

ambient 0 1 0

dir_light  1 1 1       -3 -4 -5

# A red sphere with 0.5 green ambiance, centered at (0,0,0) with radius 1
material  0 0.5 0  1 0 0    1 0 0   0 0 0  0 0 0  10 1 0
sphere   0    0 0 0    1   
Run Code Online (Sandbox Code Playgroud)

这里

由OpenGL生成的结果图像.

这里

我的渲染应用程序生成的图像.

如您所见,两者之间存在各种差异:

  1. 我的图像上的镜面高光小于OpenGL中的镜面高光.
  2. 漫反射表面似乎没有以正确的方式漫射,导致黄色区域在我的图像中不必要地变大,而在OpenGL中,有一个很好的深绿色区域更接近球体的底部
  3. OpenGL生成的颜色比我图像中的颜色深得多.

这些是我看到的最突出的三个差异.以下是我对Phong照明的实现:

R3Rgb Phong(R3Scene *scene, R3Ray *ray, R3Intersection *intersection)
{
  R3Rgb radiance;
  if(intersection->hit == 0)
  {
    radiance = scene->background;
    return radiance;
  }

  R3Vector normal …
Run Code Online (Sandbox Code Playgroud)

c++ opengl reflection raytracing

6
推荐指数
1
解决办法
2666
查看次数

由一些角度的Perturb传染媒介

我在3D空间中有一个单位向量,其方向我希望在0到θ的范围内以某个角度扰动,向量的位置保持不变.我能做到这一点的方法是什么?

谢谢.

编辑:在考虑了我提出问题的方式后,似乎有点过于笼统.我将尝试使其更具体:假设矢量源自对象的表面(即球体,圆形,方框,线条,圆柱体,圆锥体).如果有不同的方法来为每个对象找到新的方向,那么为球体提供帮助就可以了.

编辑2:我打算在评论中输入这个,但它太多了.

所以我有orig_vector,我想在0和0之间的某个方向扰乱theta.的theta可以被认为是形成围绕我的向量的圆锥(具有theta为中心和锥体的一侧之间的角度),我希望以产生锥内的新载体.我可以在平面上生成一个与矢量相切的点,从而在点的方向上创建一个单位矢量,调用它rand_vector.此时,I orig_vector和t rand_vector是两个彼此垂直的单位矢量.

我生成我的第一个角,angle10和二皮之间,我旋转rand_vector周围orig_vectorangle1形成rand_vector2.我在线查找了一个资源,它说第二个角度angle2应该在0和sin(theta)(theta原始的"锥形"角度)之间.然后我围绕rand_vector2由和acos(angle2)之间的叉积定义的向量旋转.rand_vector2orig_vector

当我这样做时,我没有获得所需的结果.也就是说,当theta=0我仍然受到扰动的向量时,我希望得到orig_vector.如果有人能够解释角度的原因以及它们的原因,我将非常感激.

编辑3:这是最后的编辑,我保证=).所以我修复了我的错误,我上面描述的所有内容都有效(这是一个实现错误,而不是理论错误).但是,我关于角度的问题(即为什么是angle2 = sin(theta)*rand(),为什么是perturbed_vector = rand_vector2.Rotate(rand_vector2.Cross(orig_vector), acos(angle2)).非常感谢!

math geometry trigonometry vector

3
推荐指数
1
解决办法
5998
查看次数

c ++循环浮点数来设置精度

我希望舍入浮点数来设置精度并从函数返回结果.例如,我目前有以下功能:

inline bool R3Point::
operator==(const R3Point& point) const
{
  // Return whether point is equal
  return ((v[0] == point.v[0]) && (v[1] == point.v[1]) && (v[2] == point.v[2]));
}
Run Code Online (Sandbox Code Playgroud)

我希望做的不是直接v[i] == point.v[i]比较,我希望只将数字与某个设定精度进行比较,这样如果v[i] = 0.33349999999999996point.v[i] = 0.33350000000000002,我的相等比较将导致TRUE.

我知道有一个c ++ smanip setprecision ( int n );函数,我看到它在屏幕上显示输出时使用了很多cout.但是,我不确定这是否可以像我描述的那样在函数中使用.

谢谢.

c++ floating-point precision

2
推荐指数
1
解决办法
1774
查看次数

确定3D点是否在2D圆内

我希望确定点P(x,y,z)是否位于由其中心C(cx,cy,cz),半径R定义的3D空间中的2D圆内,以及圆位于N上的平面的法线.

我知道在3D空间中位于2D圆上的点P由以下定义:

P = R*cos(t)U + R sin(t)*(N × U)+ C.

其中U是从圆心到圆上任意点的单位矢量.但考虑到Q点,我如何知道Q是在圆圈内还是在圆圈内?t选择适当的参数是什么?我在哪个坐标上比较点Q,看它们是否在圆圈内?

谢谢.

math geometry raytracing

2
推荐指数
1
解决办法
1561
查看次数

vim c ++ break line

在vim中编写c ++代码时如何打破长线?例如,如果我有类似的东西

56 fprintf(stderr, "Syntax error reading recursion value on 
57                line %d in file %s\n", line_count, filename);
Run Code Online (Sandbox Code Playgroud)

我得到以下编译错误:

:56:25: warning: missing terminating " character
:56: error: missing terminating " character
:57: error: stray ‘\’ in program
:57:37: warning: missing terminating " character
:57: error: missing terminating " character
Run Code Online (Sandbox Code Playgroud)

我是一个新手.

谢谢!

c++ vim formatting

0
推荐指数
1
解决办法
1321
查看次数