相关疑难解决方法(0)

如何校准相机的焦距,平移和旋转给出四点?

我正试图在世界空间中找到相机的焦距,位置和方向.

因为我需要这是与分辨率无关的,我归我的图像坐标,以在范围[-1, 1]x,和一个稍小范围y(取决于纵横比).(0, 0)图像的中心也是如此.我已经纠正了镜头失真(使用k1k2系数),所以这不会进入图片,除了有时投掷xy稍微超出[-1, 1]范围.

作为给定,我在已知尺寸的世界空间中具有平面的固定矩形(以毫米为单位).保证矩形的四个角可见,并在图像中手动标记.例如:

std::vector<cv::Point3f> worldPoints = {
    cv::Point3f(0, 0, 0),
    cv::Point3f(2000, 0, 0),
    cv::Point3f(0, 3000, 0),
    cv::Point3f(2000, 3000, 0),
};
std::vector<cv::Point2f> imagePoints = {
    cv::Point2f(-0.958707, -0.219624),
    cv::Point2f(-1.22234, 0.577061),
    cv::Point2f(0.0837469, -0.1783),
    cv::Point2f(0.205473, 0.428184),
};
Run Code Online (Sandbox Code Playgroud)

实际上,我认为我试图解决的等式是(参见OpenCV文档中等价物):

  / xi \   / fx    0 \ /        tx \ / Xi \
s | yi | = | …
Run Code Online (Sandbox Code Playgroud)

c++ opencv opencv3.1

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

从相机标定opencv python鸟瞰视角变换

我试图从相机内在、外在矩阵和畸变系数中获得鸟瞰透视变换。

我尝试使用这个问题的答案。

使用的图片是来自opencv官方github repo的示例图片left02.jpg

来自opencv示例图像的预期未失真的图像left02.jpg图像,即获得图像的鸟瞰图

我校准了相机并找到了内在、外在矩阵和失真系数。

我未扭曲图像并找到了姿势。检查参数是否正确。

未失真和可视化姿势后的图像

我用来找到透视变换矩阵的方程是(参考上面的链接):

Hr = K * R.inv() * K.inv() 其中 R 是旋转矩阵(来自 cv2.Rodrigues()),K 来自 cv2.getoptimalnewcameramatrix()

     [ 1  0  |         ]
Ht = [ 0  1  | -K*C/Cz ]
     [ 0  0  |         ]
Run Code Online (Sandbox Code Playgroud)

其中C=-R.inv()*TT 是来自的平移向量cv2.solvePnP() ,Cz 是 C 向量的第三个分量

所需的转换是: H = Ht * Hr

我用来构造上述等式的代码是:

K = newcameramtx # from cv2.getoptimalnewcameramatrix()
ret,rvec,tvec = cv2.solvePnP(world_points,corners2,K,dist) 
R,_ = cv2.Rodrigues(rvec)
_,R_inv = cv2.invert(R)
_,K_inv = cv2.invert(K)
Hr = np.matmul(K,np.matmul(R_inv,K_inv))
C = np.matmul(-R_inv,tvec) …
Run Code Online (Sandbox Code Playgroud)

python opencv matrix perspective camera-calibration

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