小编Sas*_*ssa的帖子

更小的重投影错误总是意味着更好的校准吗?

在相机校准期间,通常的建议是使用许多图像(> 10),其中包括姿势,深度等变化.但是我注意到,通常我使用的图像越少,重投影误差越小.例如,对于27个图像,cv :: calibrateCamera返回0.23并且仅有3我得到0.11这可能是由于在校准期间我们正在解决超定系统的最小二乘问题.

问题:

  1. 我们是否真的使用重投影误差作为校准良好程度的绝对量度?例如,如果我使用3张图像进行校准并获得0.11,然后使用其他27张图像进行校准并得到0.23,我们真的可以说"第一次校准更好"吗?

  2. OpenCV使用相同的图像进行校准和计算误差.是不是有某种形式的过度拟合?如果我实际使用了2个不同的设置 - 一个用于计算校准参数而另一个用于计算误差 - 那么这不是更正确吗?在这种情况下,我会使用相同的(测试)集来计算来自不同(训练)集的所有校准结果的误差.那不是更公平吗?

opencv camera-calibration

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

使用OpenCV从屏幕坐标计算世界坐标

我用OpenCV计算了相机的内在和外在参数.现在,我想从屏幕坐标(u,v)计算世界坐标(x,y,z).

我是怎么做到的

注意,当我使用kinect时,我已经知道了z坐标.

任何帮助深表感谢.谢谢!

opencv calibration camera-calibration kinect

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

Microsoft Kinect SDK返回的深度图像是否已经失真?

据说微软SDK可以访问Kinect的内部参数,但有人知道它返回的深度图像是否真的没有失真?我找不到任何相关的东西.

让我知道如果我不在话题,虽然我认为这是一个隐含的编程问题:)

编辑:我发现支持@ Coeffect的答案的其他一些有用的链接

camera-calibration kinect

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

立体校准后将相机 1 图像中的 2d 点投影到相机 2 图像

我正在使用 opencv 对两个相机(让我们将它们命名为 L 和 R)进行立体校准。我使用 20 对棋盘图像并计算 R 相对于 L 的变换。我想要做的是使用一对新图像,计算图像 L 中的 2d 棋盘角,根据我的校准变换这些点并绘制图像 R 上对应的变换点,希望它们与该图像中棋盘的角相匹配。

我尝试了将 2d 点从 [x,y] 转换为 [x,y,1] 的简单方法,乘以 3x3 旋转矩阵,添加旋转向量,然后除以 z,但结果是错误的,所以我我猜事情没那么简单(?)

编辑(澄清一些事情):

我想这样做的原因基本上是因为我想验证一对新图像的立体校准。所以,我实际上不想在两个图像之间获得新的 2d 变换,我想检查我找到的 3d 变换是否正确。

这是我的设置:

设置

我有与两个摄像机(E)相关的旋转和平移,但没有与每个摄像机(E_R,E_L)相关的对象的旋转和平移。

理想情况下我想做的是:

  1. 选择来自摄像机 L 的图像中的 2d 角(以像素为单位,例如 [100,200] 等)。
  2. 根据我找到的矩阵 E对 2d 点进行某种变换。
  3. 从相机 R 获取图像中相应的 2d 点,绘制它们,希望它们与实际的角匹配!

但我想得越多,我就越确信这是错误的/不可能做到的。

我现在可能正在尝试的:

  1. 使用相机的内在参数(假设 I_R 和 I_L),求解 2 个最小二乘系统以找到 E_R 和 E_L
  2. 从相机 L 中选择图像中的 2d 角。
  3. 将这些角投影到其相应的 3d 点 (3d_points_L)。
  4. 执行: 3d_points_R = (E_L).inverse …

opencv 2d computer-vision stereo-3d camera-calibration

5
推荐指数
1
解决办法
3564
查看次数

功能类宏和奇怪的行为

我已经开始阅读Effective C++了,在第2项的某些时候,提到了以下内容:

// call f with the maximum of a and b
#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))

...

int a = 5, b = 0;
CALL_WITH_MAX(++a, b); // a is incremented twice
CALL_WITH_MAX(++a, b+10); // a is incremented once
Run Code Online (Sandbox Code Playgroud)

这里,a在调用f之前递增的次数取决于它与之比较的次数!

事实上,如果我使用一个简单的打印声明f,7在第一次打电话中打印,但我不能为我的生活找出原因.我错过了一些明显的东西吗

c++ macros effective-c++

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

单击 Espresso 中具有相同 id 的多个视图之一

我的布局 (A) 多次包含另一个布局 (B)。布局 B 包含一个 id 的按钮R.id.my_button。因此,布局 A 包含许多具有相同 id 的按钮。

如何使用 espresso 测试点击这些按钮中的任何一个?

onView(withId(R.id.my_button)).perform(click());在这种情况下并没有真正做任何事情。

android android-testing android-espresso

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

OpenCV 和 MATLAB 灰度值对于同一图像不同

在 MATLAB 中,我读取了一个彩色视频,提取某个帧并使用该rgb2gray函数将其转换为灰度图像。但是当我使用 OpenCV2.3.1 加载相同的视频时,提取相同的帧然后将其转换为灰度它不会'不会给出与 MATLAB 相同的灰度值。这是为什么?

这是使用 OpenCV 的 C++ 代码:

VideoCapture cap(0);    
cap.open("Human sperm evaluation_0.avi");    

Mat image;    
Mat gray(480,640,CV_8U);    

for(int i=0;i<513;i++)
{
    cap>>image;
    cvtColor(image,gray,CV_RGB2GRAY);
}

for(int i=0;i<20;i++)
{
    for(int j=0;j<20;j++)
    {
        cout<<(int)gray.at<uchar>(i,j)<<' ';
    }
}
Run Code Online (Sandbox Code Playgroud)

matlab opencv

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

清空Array = []会导致内存泄漏吗?

嘿伙计们,我想知道是否删除舞台上的所有对象:

//bomb
for each (var bomb:mcBomb in aBombArray)
{
    bomb.parent.removeChild(bomb);
    aBombArray = [];
    bomb = null;
}
Run Code Online (Sandbox Code Playgroud)

在游戏结束时导致内存泄漏?这是删除数组中的所有对象并将其设置为0吗?我应该改用aBombArray.length = 0;吗?

我在比赛结束时将所有阵列都移除了.我注意到,当你进入"游戏结束"屏幕时,内存不会减少而是仍然会爬升.不确定这可能是问题所在.

多谢你们.

arrays memory-leaks actionscript-3 array-splice

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