2017-10-09 85 views

回答

2

可以變換從笛卡爾圖像座標系極座標系爲OCR程序準備圓形路徑文本圖像。此功能logPolar()可以提供幫助。

這裏有一些步驟來準備大圓路徑文字圖片:

  1. 使用HoughCircles()找到圈的中心。
  2. 獲取平均值並做一些抵消,所以得到中心。
  3. (Optinal)從中心裁剪圖像的正方形。
  4. 執行logPolar(),然後根據需要旋轉它。

檢測後圈並獲得中心的平均值和不偏移。 enter image description here

的croped圖像:

enter image description here

logPolar()rotate()

enter image description here


Python3-OpenCV3.3代碼這裏提出,也許有幫助。

#!/usr/bin/python3 
# 2017.10.10 12:44:37 CST 
# 2017.10.10 14:08:57 CST 
import cv2 
import numpy as np 

##(1) Read and resize the original image(too big) 
img = cv2.imread("circle.png") 
img = cv2.resize(img, (W//4, H//4)) 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 

## (2) Detect circles 
circles = cv2.HoughCircles(gray, method=cv2.HOUGH_GRADIENT, dp=1, minDist=3, circles=None, param1=200, param2=100, minRadius = 200, maxRadius=0) 

## make canvas 
canvas = img.copy() 

## (3) Get the mean of centers and do offset 
circles = np.int0(np.array(circles)) 
x,y,r = 0,0,0 
for ptx,pty, radius in circles[0]: 
    cv2.circle(canvas, (ptx,pty), radius, (0,255,0), 1, 16) 
    x += ptx 
    y += pty 
    r += radius 

cnt = len(circles[0]) 
x = x//cnt 
y = y//cnt 
r = r//cnt 
x+=5 
y-=7 

## (4) Draw the labels in red 
for r in range(100, r, 20): 
    cv2.circle(canvas, (x,y), r, (0, 0, 255), 3, cv2.LINE_AA) 
cv2.circle(canvas, (x,y), 3, (0,0,255), -1) 

## (5) Crop the image 
dr = r + 20 
croped = img[y-dr:y+dr+1, x-dr:x+dr+1].copy() 

## (6) logPolar and rotate 
polar = cv2.logPolar(croped, (dr,dr),80, cv2.WARP_FILL_OUTLIERS) 
rotated = cv2.rotate(polar, cv2.ROTATE_90_COUNTERCLOCKWISE) 

## (7) Display the result 
cv2.imshow("Canvas", canvas) 
cv2.imshow("croped", croped) 
cv2.imshow("polar", polar) 
cv2.imshow("rotated", rotated) 

cv2.waitKey();cv2.destroyAllWindows()