函數 cv2.cartToPolar 用于将直角坐标(笛卡爾坐标)轉換為極坐标,函數 cv2.polarToCart 用于将極坐标轉換為直角坐标(笛卡爾坐标)。
圓形圖案邊緣上的文字經過及坐标變換後可以垂直的排列在新圖像的邊緣,便于對文字的識别和檢測。
函數說明:
cv2.cartToPolar(x, y[, magnitude[, angle[, angleInDegrees]]]) → magnitude, angle
cv2.polarToCart(magnitude, angle[, x[, y[, angleInDegrees]]]) → x, y
函數 cv2.cartToPolar 實現将原點移動到變換中心後的直角坐标向極坐标的轉換,輸入參數為直角坐标系的橫坐标、縱坐标,輸出為極坐标系的向量值、角度值。
函數 cv2.polarToCart 實現将原點移動到變換中心後的極坐标向直角坐标的轉換,輸入參數為極坐标系的向量值、角度值,輸出為直角坐标系的橫坐标、縱坐标。
參數說明:
# 1.45 直角坐标轉換為極坐标
x = np.float32([0,1,2, 0,1,2, 0,1,2]) -1
y = np.float32([0,0,0, 1,1,1, 2,2,2]) -1
n = np.arange(9)
r, theta = cv2.cartToPolar(x, y, angleInDegrees=True)
xr,yr = cv2.polarToCart(r, theta, angleInDegrees=1)
print(xr,yr)
plt.figure(figsize=(9,5))
plt.subplot(121), plt.title("Cartesian coordinate"), plt.plot(x, y, 'o')
for i, txt in enumerate(n):
plt.annotate(txt, (x[i], y[i]))
plt.subplot(122), plt.title("Polar coordinate"), plt.plot(r, theta, 'o')
for i, txt in enumerate(n):
plt.annotate(txt, (r[i], theta[i]))
plt.show()
# 1.46 極坐标系中的圓形圖像修正
img = cv2.imread("../images/imgC3.jpg") # 讀取彩色圖像(BGR)
h, w = img.shape[:2] # 圖片的高度和寬度
cx, cy = int(w/2), int(h/2) # 以圖像中心點作為變換中心
maxR = max(cx, cy) # 最大變換半徑
imgPolar = cv2.linearPolar(img, (cx,cy), maxR, cv2.INTER_LINEAR)
imgPR = cv2.rotate(imgPolar, cv2.ROTATE_90_COUNTERCLOCKWISE)
plt.figure(figsize=(10,6))
plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title("Original"), plt.axis('off')
plt.subplot(122), plt.imshow(cv2.cvtColor(imgPR, cv2.COLOR_BGR2RGB)), plt.title("PolarTrans"), plt.axis('off')
plt.show()
通過極坐标和直角坐标的對應關系,将圓環圖像轉換為矩形圖像,可以對圓形圖像進行修正。
【OpenCV學習之路】是針對Python OpenCV學習所打造的一場刷題狂歡party! 對基礎知識把握不牢固的話,歡迎來學習嗷~喜歡的話就抓緊收藏起來吧!
如果對學習沒有自制力或者沒有一起學習交流的動力,歡迎私我“進群”,邀請你來我的學習交流群,我們一起交流學習,報團打卡!
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!