我有一個函式,它通過使用 OpenCV 的輪廓檢測圍繞影像中的一些主要特征繪制多邊形。我在下面的代碼片段中使用 approxPolyDP 函式簡化這些輪廓以回傳區域周圍的閉合梯形,并且它作業正常:
top_poly = cv.approxPolyDP(top_cnt, 0.05 * top_perimeter, closed=True)
top_poly = np.squeeze(top_poly) # get rid of the singleton dimension
但是,當根據下面鏈接的檔案的預期輸出是 N x 2D 點 (N x 2) 的陣列時,approxPolyDP 回傳一種奇怪型別的 ndarray,其形狀為 N x 1 x 2。我不得不除錯一段時間,直到我發現可以使用代碼段第二行中的 np.squeeze 來雕刻出其中的單例維度。感謝這個答案:cv2.approxPolydp() 回傳什么?
我的問題是,這個單一維度的目的是什么?我擔心我可能會丟失一些有用的資訊,而且我不喜歡以我不完全理解的方式使用 np.squeeze()。感謝您提供任何可以對此有所了解的意見。
https://docs.opencv.org/4.5.4/d3/dc0/group__imgproc__shape.html#ga0012a5fdaea70b8a9970165d98722b4c
uj5u.com熱心網友回復:
結果形狀的發生是因為 OpenCV 的要求,即它必須將 numpy 陣列映射到cv::Mat和回傳。
Acv::Mat是帶有通道的 2D 東西,它可以是顏色(RGB 或其他)、2D 點、3D 點、4D 等,或任何其他用途。
形狀一般(height, width, channels)。
OpenCV 將點作為 2 通道資料的列向量 (Nx1) 回傳,因此(N, 1, 2)。
OpenCV的是有些寬容不同的形狀等(N, 2, 1),其是(N, 2)(N行,2列的單信道)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/387282.html
上一篇:FileExistsError:[Errno17]檔案存在:'/usr/bin/python'->'/home/had2000/.virtualenvs/cv/bi
