opencv 平面法向量_在OpenCV中绘制平面的法向量
我使用2D條形碼識別3D空間中的平面,我想繪制相對于其中心的法線。
這是我用來計算正常的代碼
def compute_normal(camera, board, bounds, frame):
extrinsics, ip, op = get_extrinsics(camera, frame, board, bounds)
extrinsic = extrinsics[0]
if not extrinsic: return [], None
camera_transform = M_from_extrinsic(extrinsic)
transformed_board = transform_board(board, camera_transform)
# change this to be the corners of any board, not just 4-square
p1 = transformed_board[3][:3]
p2 = transformed_board[6][:3]
p3 = transformed_board[8][:3]
l1 = p2 - p1
l2 = p3 - p1
normal = np.cross(l1, l2)
return normal, extrinsic
board只是一個3xN的對象點數(shù)組(所有內(nèi)容都由solvePnP支持)。點p1,p2,p3是理想校準(zhǔn)板的左上角,右上角和左下角。帶圓圈的點是我為計算選擇的點。其他幾點是更多的角落,這些角落沒有被考慮。
在我計算法線之后,這是我繪制它的方式。
normal, extrinsic = compute_normal(camera0, board0, [[0, 4]], im)
if len(normal):
projected_center, jac0 = cv2.projectPoints(board_center, extrinsic.rvec, extrinsic.tvec, camera0.mtx, camera0.dist)
projected_norm, jac1 = cv2.projectPoints(np.array([normal]), extrinsic.rvec, extrinsic.tvec, camera0.mtx, camera0.dist)
origin = clean_image_points(projected_center.reshape(1, 2))[0]
vec = clean_image_points(projected_norm.reshape(1, 2))[0]
cv2.arrowedLine(im, origin, vec, (0, 255, 0), 5)
但是,我得到的結(jié)果看起來像這樣
正如您所看到的,綠線指向應(yīng)指向屏幕的某個方向,因為電路板或多或少地面向相機。
我可以確認(rèn)計算extrinsics工作正常,因為我在其他幾個地方使用它。我只是不確定正常的計算和繪圖。
感謝您的幫助!
總結(jié)
以上是生活随笔為你收集整理的opencv 平面法向量_在OpenCV中绘制平面的法向量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lisp画靶子 visual_基于Vis
- 下一篇: autoload.php beanbun