
我的問題是我有一條線(左側為紅色),我想將其轉換為右側圖片中的內容。(這是一個二值化的影像,所以除了圖中的(紅色)線是白色的以外,一切都是黑色的。)黑點象征著灰色圓圈的中心。所以很明顯,紅線的點不能適合1個圓的邊緣,而是存在2個r1,r2(半徑)的圓,它們一起形成一個環,它的表面(圖片上的灰色)可以包含所有紅線的點。對于不同的圖片,r1和r2可以不同,但??保證r2>r1>0。
所以我需要一個映射,它可以將紅線的點(x,y)(numpy矩陣)從灰環轉換為矩形。“沒有公式”我會想象這就像在某個地方切割戒指,然后將它折疊成一個矩形。
uj5u.com熱心網友回復:
正如@fmw42 敏銳地指出的那樣,您可以使用cv2.warpPolar. 這是一個例子。
import math
import cv2
ring = cv2.imread("so71416458-crop.png")
size = ring.shape[0] # assumes square image
outer_radius = size // 2
inner_radius_factor = 0.7 # 0.70 measured empirically from image
# Unwarp ring
warped = cv2.warpPolar(ring, (size, int(size * math.pi)), (outer_radius, outer_radius), outer_radius, 0)
# Rotate 90 degrees
straightened = cv2.rotate(warped, cv2.ROTATE_90_COUNTERCLOCKWISE)
# Crop to ring only
cropped = straightened[: int(straightened.shape[0] * (1 - inner_radius_factor)), :]
cv2.imwrite("so71416458-straight.png", cropped)
輸入:so71416458-crop.png

這里明顯的“擺動”是我草率裁剪的結果——環的中心點并不完全在影像的中點。
輸出:so71416458-straight.png

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/442189.html
