opencv實現(xiàn)文檔矯正_第1頁
opencv實現(xiàn)文檔矯正_第2頁
opencv實現(xiàn)文檔矯正_第3頁
opencv實現(xiàn)文檔矯正_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第opencv實現(xiàn)文檔矯正本文實例為大家分享了opencv實現(xiàn)文檔矯正的具體代碼,供大家參考,具體內(nèi)容如下

原始文檔

矯正后文檔

只要獲得傾斜文檔的傾斜角度,然后通過仿射變化旋轉一下就可以實現(xiàn)矯正了,這里獲取傾斜角度的方法有兩個,下面分別介紹

1、利用霍夫變換,文檔內(nèi)容都是平行的,首先利用利用霍夫變換檢測直線,然后將所有直線的平均傾斜角度當做文檔的傾斜角度,最后再進行仿射變換就可以了。

importcv2

importnumpyasnp

defimshow(img):

cv2.imshow("img",img)

cv2.waitKey(0)

cv2.destroyAllWindows()

img=cv2.imread("2.png",1)

img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

img2=img.copy()

img_canny=cv2.Canny(img,75,200)

img_line=cv2.HoughLines(img_canny,1,np.pi/180,280)

average=0

forlineinimg_line:

forrho,thetainline:

average=average+theta

average=average/len(img_line)

angel=average/np.pi*180-90

defrotateImg(img,angel):

rows,cols=img.shape

M=cv2.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),angel,1)

#旋轉中心x,旋轉中心y,旋轉角度,縮放因子

img=cv2.warpAffine(img,M,(cols,rows),borderValue=(255,255,255))

#在內(nèi)存里完成了旋轉

imshow(img)

rotateImg(img2,angle)

2、求文檔內(nèi)容的最小包圍矩形。首先檢測輪廓,利用形態(tài)學操作求mask,然后再檢測輪廓,求最下包圍矩形,最小包圍矩形會返回一個傾斜角度(度數(shù),霍夫變換的傾斜角度是弧度制),可以對輪廓進行篩選,將面積最大的輪廓的傾斜角度作為文檔的傾斜角度,然后做仿射變換。

importcv2

importnumpyasnp

defimshow(img):

cv2.imshow("img",img)

cv2.waitKey(0)

cv2.destroyAllWindows()

img=cv2.imread("2.png",1)

img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

img2=img.copy()

imgth=cv2.threshold(img,0,255,cv2.THRESH_OTSU|cv2.THRESH_BINARY_INV)[1]

kernel=np.ones((17,17))

img_open=cv2.morphologyEx(imgth,cv2.MORPH_CLOSE,kernel,10)

#imshow(img_open)

cons=cv2.findContours(img_open,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)[0]

areas=[]

forconincons:

area=cv2.contourArea(con)

areas.append(area)

index=areas.index(max(areas))

#度數(shù)形式,霍夫變換的返回值是弧度制

rect=cv2.minAreaRect(cons[index])

angle=rect[2]

mat=cv2.getRotationMatrix2D((img.shape[1]/2,img.shape[0]/2),angle,1)

img_fin=cv2.warpAffine(img,mat,(img.shape[1],img.shape[0]),borderValue=(255,255,255))

imshow(img_fin)

利用仿射變換實現(xiàn)圖像旋轉指定度數(shù)

mat=cv2.getRotationMatrix2D(center,angle,c)(center:旋轉中心,angle:旋轉角度,c:縮放大小)

img_final=cv2.warpAffine(img,mat,(img.shape[1],img.shape[0]),borderValue=(255,255,255))(borderValue為可選參數(shù),填充色,默認為黑色)

另外旋轉指定90,180,270可以使用transpose、flip來實現(xiàn)

旋轉90度(順時針)

img=cv2.transpose(img)

res_img

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論