小编Jos*_*sch的帖子

使用Opencv进行广角镜头校准

我正在使用广角镜头(178º对角线FOV),我正在尝试使用Opencv校准模块正确校准它.所有的检测和校准过程都工作正常,但结果很差.

我尝试了很多不同的配置:

  • 不同的图像集
  • 不同的径向系数:2,3,4,5甚至6.(CV_CALIB_FIX_K1,...,CV_CALIB_FIX_K6)
  • 将主点和切向失真固定为0(CV_CALIB_FIX_ASPECT_RATIO,CV_CALIB_FIX_PRINCIPAL_POINT)
  • 使用预期焦距作为初始相机矩阵.(CV_CALIB_USE_INTRINSIC_GUESS)

我能得到的最好的是:校准不好

关于如何获得良好校准的任何想法?您是否认为同时使用两种校准模式,或使用圆形网格作为校准模式会有所帮助?

我在opencv 3.0中看到了薄棱镜系数的添加.我没试过,但我认为不会有所作为,对吧?编辑:检查它......没什么

camera opencv calibration computer-vision camera-calibration

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

使用opencv从3d点创建全景图像

我有一个PointGrey Ladybug3相机.它是一个全景(多)摄像头(5个摄像头可以360º和1个摄像头查找).我已经完成了所有的校准和校正,所以我最终得到的是6幅图像中的所有像素,我知道它是一个全局帧的3d位置.我现在要做的是将这个3d点转换为全景图像.最常见的是径向(Equirectangular)投影,如下所示: 径向投射

对于所有3D点(X,Y,Z),可以找到theta和phi坐标,如:

径向图像方程

我的问题是,是否可以使用opencv自动执行此操作?或者,如果我手动执行此操作,那么在theta中转换那组像素的最佳方法是什么,phi坐标到图像?

官方瓢虫SDK使用OpenGL进行所有这些操作,但我想知道是否可以在opencv中执行此操作.

谢谢,

何塞普

opencv panoramas

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

Opencv:从 R 和 T 计算基本矩阵

我想计算立体相机的极线。我知道相机内在矩阵以及 R 和 T。我试图计算学习 Opencv 书籍和维基百科中所述的基本矩阵。

基本矩阵

其中 [t]x 是与 t 的叉积的矩阵表示。

基本矩阵 所以

在此处输入图片说明

我试图用 python 实现这个,然后使用 opencv 函数cv2.computeCorrespondEpilines来计算外线。

坏的外排

问题是我得到的线没有像它们应该的那样收敛在一个点上......我想我在计算 F 时一定有问题。

这是相关的代码:

 T #Contains translation vector
 R #Rotation matrix
 S=np.mat([[0,-T[2],T[1]],[T[2],0,-T[1]],[-T[1],T[0],0]])
 E=np.mat(R)*S

 M1=np.mat(self.getCameraMatrix(cam1))
 M1_inv=np.linalg.inv(M1)
 M2=np.mat(self.getCameraMatrix(cam2))
 M2_inv=np.linalg.inv(M2)

 F=(M2_inv.T)*E*M1_inv
Run Code Online (Sandbox Code Playgroud)

矩阵是:

M1=[[ 776.21275864    0.          773.70733324]
 [   0.          776.21275864  627.82872456]
 [   0.            0.            1.        ]]

M2=[[ 764.35675708    0.          831.26052677]
 [   0.          764.35675708  611.85363745]
 [   0.            0.            1.        ]]

R=[[ 0.9999902   0.00322032  0.00303674]
 [-0.00387935  0.30727176  0.9516139 ]
 [ 0.0021314  -0.95161636  0.30728124]]

T=[ 0.0001648   0.04149158 -0.02854541] …
Run Code Online (Sandbox Code Playgroud)

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

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

从基本矩阵构成,反之亦然

我使用opencv的findFundamentalMat计算了两台摄像机之间的基本矩阵.然后我绘制图像中的极线.我得到类似的东西:

极线可以 现在,我试图从基本矩阵中获得姿势,首先计算基本矩阵,然后使用Hartley和Zissserman方法.

K2=np.mat(self.calibration.getCameraMatrix(1))
K1=np.mat(self.calibration.getCameraMatrix(0))
E=K2.T*np.mat(F)*K1
Run Code Online (Sandbox Code Playgroud)

赫兹

w,u,vt = cv2.SVDecomp(np.mat(E))   
if np.linalg.det(u) < 0:
    u *= -1.0
if np.linalg.det(vt) < 0:
    vt *= -1.0 
#Find R and T from Hartley & Zisserman
W=np.mat([[0,-1,0],[1,0,0],[0,0,1]],dtype=float)
R = np.mat(u) * W * np.mat(vt)
t = u[:,2] #u3 normalized.
Run Code Online (Sandbox Code Playgroud)

为了检查一切,直到这里是正确的,我重新计算E和F并再次绘制极线.

S=np.mat([[0,-T[2],T[1]],[T[2],0,-T[0]],[-T[1],T[0],0]])
E=S*np.mat(R)
F=np.linalg.inv(K2).T*np.mat(E)*np.linalg.inv(K1)
Run Code Online (Sandbox Code Playgroud)

但令人惊讶的是,线条已经移动,他们不再通过积分了.我做错了什么吗?

epilines坏

它可能与这个问题有关http://answers.opencv.org/question/18565/pose-estimation-produces-wrong-translation-vector/,但他们没有提供解决方案

我得到的矩阵是:

Original F=[[ -1.62627683e-07  -1.38840952e-05   8.03246936e-03]
 [  5.83844799e-06  -1.37528349e-06  -3.26617731e-03]
 [ -1.15902181e-02   1.23440336e-02   1.00000000e+00]]

E=[[-0.09648757 -8.23748182 -0.6192747 ]
 [ 3.46397143 -0.81596046  0.29628779]
 [-6.32856235 -0.03006961 -0.65380443]]

R=[[  9.99558381e-01 …
Run Code Online (Sandbox Code Playgroud)

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

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

OPENCV:Calibratecamera 2重投影错误和自定义计算错误

我有一个python脚本,使用calibratecamera2方法从棋盘的几个视图校准相机.校准成功后,我会检查所有原始点并做一些绘图并再次计算重新投影误差.令我惊讶的是,opencv和我计算的重投影错误有点不同.我发现它很奇怪.我是以错误的方式计算它的吗?

obj_points = []# 3d point in real world space. List of arrays
img_points = []# 2d points in image plane. List of arrays

...

ret, camera_matrix, dist_coeffs, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, (w, h), camera_matrix, dist_coeffs, rvecs, tvecs, calib_flags +cv2.CALIB_USE_INTRINSIC_GUESS, criteria)
print "Final reprojection error opencv: ", ret   #Compute mean of reprojection error
tot_mean_error=0
mean_error_image = 0
for i in xrange(len(obj_points)):
    reprojected_points, _ = cv2.projectPoints(obj_points[i], rvecs[i], tvecs[i], camera_matrix, dist_coeffs)
    reprojected_points=reprojected_points.reshape(-1,2)
    mean_error_image=np.sum(np.sum(np.abs(img_points[i]-reprojected_points)**2,axis=-1)**(1./2))/np.alen(reprojected_points)
    tot_mean_error +=mean_error_image

mean_error=tot_mean_error/len(obj_points)
print "Mean reprojection error: ", …
Run Code Online (Sandbox Code Playgroud)

python camera opencv calibration

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

Python:从一堆点中选择分布更好的n个点

我在 XY 平面中有一个 numpy 点数组,例如: 分配

我想从所有这些点中选择更好地分布的 n 个点(比如 100 个)。也就是说,我希望点的密度在任何地方都是恒定的。

像这样的东西:

在此处输入图片说明

是否有任何 pythonic 方式或任何 numpy/scipy 函数来做到这一点?

python numpy scipy

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

使用ffmpeg将多个Mp4视频重新映射到一个视频

我有兴趣根据我计算的查找表将多个(6)MP4视频重新映射到高分辨率的最终视频中.这个想法是根据一个equirectangular投影转换360º视频中的6个独立视频.

Equirectangular图像示例 这里有equirectangular视频的例子

有没有办法用ffmpeg或任何其他Linux程序重新映射?现在我正在从视频中提取所有帧,创建equirectangular单个图像并再次将它们连接到视频中.必须有一个更好的方法...

更新:

根据Mulyva的建议,我首先使用重映射过滤器重新映射每个单独的视频.未覆盖的全景视频的那些部分被解释为像色度键像素一样使用:

ffmpeg -i videos/camera1.MP4 -i camera0_map_x_radius5.pgm -i camera0_map_y_radius5.pgm -lavfi remap -qscale 1 out0.MP4
Run Code Online (Sandbox Code Playgroud)

Camera0

摄像机1

然后我尝试使用chomakey过滤器覆盖它们:

 ffmpeg -i out0.MP4 -i out1.MP4 -filter_complex "[1:v]chromakey=0x12da11:0.2:0.2[chromakey_res];[0:v][chromakey_res]overlay=eof_action=pass[out]" -map "[out]" out.mp4
Run Code Online (Sandbox Code Playgroud)

如您所见,最终结果有一个不受欢迎的绿色阴影.知道如何删除它吗?

结果

video mp4 ffmpeg avconv

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