我一直在尝试使用OpenCV提供的reprojectImageTo3D()函数从视差图计算点的真实世界坐标,但输出似乎不正确.
我有校准参数,并使用计算Q矩阵
stereoRectify(left_cam_matrix, left_dist_coeffs, right_cam_matrix, right_dist_coeffs, frame_size, stereo_params.R, stereo_params.T, R1, R2, P1, P2, Q, CALIB_ZERO_DISPARITY, 0, frame_size, 0, 0);
我相信这第一步是正确的,因为立体声帧正在被正确纠正,我正在执行的失真消除也似乎没问题.使用OpenCV的块匹配算法计算视差图,它看起来也很好.
3D点的计算方法如下:
cv::Mat XYZ(disparity8U.size(),CV_32FC3);
reprojectImageTo3D(disparity8U, XYZ, Q, false, CV_32F);
但出于某种原因,考虑到视差图,它们会形成某种锥形,甚至不能达到我的预期.我发现其他人对此功能有类似的问题,我想知道是否有人有解决方案.
提前致谢!
[编辑]
stereoRectify(left_cam_matrix, left_dist_coeffs, right_cam_matrix, right_dist_coeffs,frame_size, stereo_params.R, stereo_params.T, R1, R2, P1, P2, Q, CALIB_ZERO_DISPARITY, 0, frame_size, 0, 0);
initUndistortRectifyMap(left_cam_matrix, left_dist_coeffs, R1, P1, frame_size,CV_32FC1, left_undist_rect_map_x, left_undist_rect_map_y);
initUndistortRectifyMap(right_cam_matrix, right_dist_coeffs, R2, P2, frame_size, CV_32FC1, right_undist_rect_map_x, right_undist_rect_map_y);
cv::remap(left_frame, left_undist_rect, left_undist_rect_map_x, left_undist_rect_map_y, CV_INTER_CUBIC, BORDER_CONSTANT, 0);
cv::remap(right_frame, right_undist_rect, right_undist_rect_map_x, right_undist_rect_map_y, CV_INTER_CUBIC, BORDER_CONSTANT, 0);
cv::Mat imgDisparity32F = Mat( …Run Code Online (Sandbox Code Playgroud) 我已经把一个立体声凸轮装置放在一起,我很难用它来制作一个好的视差图.这是一个两个校正图像和我用它们产生的视差图的例子:

如你所见,结果非常糟糕.更改StereoBM的设置并没有太大变化.
设置
StereoBM类来产生视差图.我能想象的问题
我是第一次这样做,所以我远不是专家,但我猜测问题出在校准或立体声校正中,而不是视差图的计算.我已经尝试了所有设置的排列StereoBM,虽然我得到了不同的结果,但它们都像上面显示的视差图:黑色和白色的补丁.
正如我所理解的那样,立体校正应该对齐每个图像上的所有点,以便它们通过直线(在我的情况下是水平线)连接,这一事实进一步支持了这一想法.如果我检查彼此相邻的两个经过校正的图片,那么事实并非如此,事实并非如此.右侧图片上的对应点比左侧高得多.不过,我不确定校准或整流是否是问题.
代码
实际代码包含在对象中 - 如果您有兴趣全部查看它,它可以在GitHub上获得.这是一个实际运行的简化示例(当然在我使用超过2张图片校准的实际代码中):
import cv2
import numpy as np
## Load test images
# TEST_IMAGES is a list of paths to test images
input_l, input_r = [cv2.imread(image, cv2.CV_LOAD_IMAGE_GRAYSCALE)
for image in TEST_IMAGES]
image_size = input_l.shape[:2]
## Retrieve chessboard corners
# CHESSBOARD_ROWS and CHESSBOARD_COLUMNS are the number of inside rows and
# columns in the chessboard used for calibration
pattern_size = CHESSBOARD_ROWS, CHESSBOARD_COLUMNS
object_points …Run Code Online (Sandbox Code Playgroud) 我使用 Sphinx 来记录我的代码,它是 Python 模块的集合。通过清理源代码生成的自动生成的文档很好,但是当我单击直接链接到包含 Sphinx 生成的包源的 HTML 页面的“代码”链接时,会显示旧版本的代码。
我尝试删除 Sphinx 生成的文档,从我自己的site-packages文件夹中卸载该包,并删除我的build文件夹中的所有内容。我绝对找不到与 Sphinx 输出相匹配的文件 - 它很旧,而且我不确定它来自哪里。有谁知道如何让 Sphinx 将我的新代码放入文档中?
正如我所说,自动文档工作正常,因此它显然在某种程度上解析了我的代码。那么为什么纯文本与自动文档不同呢?
我刚刚在Github上开始了我的第三个存储库.我使用README文件在网站上初始化了存储库,并尝试使用Egit将其导入Eclipse.就像我从Github的其他项目一样,导入对话框工作正常,并且克隆了存储库.在我的文件浏览器中,我可以看到Egit创建的文件夹,以及存储库中的.git文件夹和README.
但是,当我到达Eclipse希望我为项目导入选择向导时,一切都停止了.我无法导入现有项目,因为还没有.如果我尝试将其作为一般项目导入,它不会让我更进一步,因为它声称:
/ path/to/my/folder重叠另一个项目的位置:'gnu_magic'
这确实是我试图导入的项目的名称,但是我刚刚第一次导入它应该不是问题.
如果我使用新的项目向导,它不允许我使用与项目相同的文件夹名称,声称该文件夹不为空(这是真的,但当我使用向导创建一个全新的项目时很奇怪).如果我给文件夹另一个名称,它会创建一个项目,但项目没有连接到存储库 - 我无法将我的更改提交回Github.
删除gnu_magic文件夹并重新开始会带来相同的结果.
有没有办法从Eclipse的配置中删除该特定项目的元数据?我不想失去我的其他项目,但我想在项目上与Egit合作.
另一个有趣的事实:如果我手动克隆存储库然后尝试将其导入Eclipse,作为我文件系统中的项目,它不会让我因为源是在目的地的层次结构中.
或者我完全忽略了这一点?我很惊讶我能够毫无问题地克隆其他存储库.过去几天与他们合作非常容易.
根据这个问题和交互式控制台上的PyDev文档,按下F2应该将当前行从PyDev编辑器发送到Python控制台.
我在Python编辑器中打开了一个Python文件(通过打开它"打开方式" - >"Python编辑器"确认了这一点)并按下Ctrl+ 启动了控制台会话Enter.尽管如此,当我按下时F2,没有任何反应.我必须选择我感兴趣的行并用Ctrl+ 发送到控制台Enter.
我已经在"窗口" - >"首选项" - >"常规" - >"键"下检查了我的键绑定选项,并且无法看到命令"在控制台中执行行"的设置之间的任何差异,映射到F2,和"交互式控制台",映射到Ctrl+ Alt+ Enter.但是,第二个命令有效,而第一个命令不起作用.我也尝试将命令映射到其他键,但这根本没有改变结果.有关如何使用此命令的任何提示?
我在 OpenSUSE 12.1 上使用 Eclipse 和 PyDev。我有 Javascript 和 Python 项目。通过右键单击,我可以添加 TODO,但由于我正在与其他开发人员合作,我希望将它们作为代码注释,以便它们通过 SVN 与其余代码同步。
我查看了这个线程:todo Tags not working on eclipse and pydev,但遗憾的是它没有帮助。这是我的设置的简短摘要:
我认为可能导致这种情况的一件事是,在首选项 --> 常规 --> 编辑器 --> 结构化文本编辑器 --> 任务标签中,过滤器设置为仅搜索 CSS、DTD、HTML、JSP和XML。但没有办法让 Eclipse 也搜索 PY。这会导致问题吗?谢谢!
我在使用用于OpenCV的Python绑定的校准相机拍摄的图像上没有失真点.未失真的点具有与图像中检测到的原始点完全不同的坐标.
这是违规的电话:
undistorted = cv2.undistortPoints(image_points,
camera_matrix,
distortion_coefficients)
Run Code Online (Sandbox Code Playgroud)
哪里image_points是一个由检测到的棋盘角落的numpy数组返回cv2.findChessboardCorners并重新整形以匹配尺寸要求cv2.undistortPoints,camera_matrix并且distortion_coefficients被返回cv2.calibrateCamera.
camera_matrix而distortion_coefficients在我看来,会好起来的,等做image_points.然而,distorted似乎没有任何关系image_points.以下是值的摘要:
>>> image_points
array([[[ 186.95303345, 163.25502014]],
[[ 209.54478455, 164.62690735]],
[[ 232.26443481, 166.10734558]],
...,
[[ 339.03695679, 385.97784424]],
[[ 339.20108032, 400.38635254]],
[[ 339.13067627, 415.30780029]]], dtype=float32)
>>> undistorted
array([[[-0.19536583, -0.07900728]],
[[-0.16608481, -0.0772614 ]],
[[-0.13660771, -0.07537176]],
...,
[[ 0.00228534, 0.21044853]],
[[ 0.00249786, 0.22910291]],
[[ 0.00240568, 0.24841554]]], dtype=float32)
>>> camera_matrix
array([[ 767.56947802, 0. , 337.27849576],
[ …Run Code Online (Sandbox Code Playgroud)