日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv 平面法向量_在OpenCV中绘制平面的法向量

發布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的對象點數組(所有內容都由solvePnP支持)。點p1,p2,p3是理想校準板的左上角,右上角和左下角。帶圓圈的點是我為計算選擇的點。其他幾點是更多的角落,這些角落沒有被考慮。

在我計算法線之后,這是我繪制它的方式。

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)

但是,我得到的結果看起來像這樣

正如您所看到的,綠線指向應指向屏幕的某個方向,因為電路板或多或少地面向相機。

我可以確認計算extrinsics工作正常,因為我在其他幾個地方使用它。我只是不確定正常的計算和繪圖。

感謝您的幫助!

總結

以上是生活随笔為你收集整理的opencv 平面法向量_在OpenCV中绘制平面的法向量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。