opencv 處理驗證碼

1.安裝

1.1 on Python

OpenCV 官方有Python27的支持(以pyd的形式)
還有非官方支持opencv-python ,opencv-contrib-python(有一些非開源的算法實現)
支持Python3和Python2

1.2 on C++

1.2.1 可以根據cmake構建項目
1.2.2完全手動構建項目
Windows(VS)安裝參考:http://blog.csdn.net/poem_qianmo/article/details/19809337
特別注意:需要在linker中特別添加額外的lib庫名稱

2.圖片操作

2.1 opencv-python 圖像操作

import numpy as np
images:np.array
# 圖像剪切
new_image = images[h0:h1, w0:w1].copy()

#圖像平移、變化
offset_x = abs(out_width - splited_image.shape[1])/2
offset_y = abs(out_height - splited_image.shape[0])/2

#print(splited_image, splited_image.shape)
# 1 0, 0 1是固定值
TransMat = np.array([[1,0,offset_x],
                     [0,1,offset_y]])

#新的圖像的順序是高寬倒序,灰度圖255意味着白底
#這個函數用作將驗證碼字符移到固定大小的白板中央
new_image = cv2.warpAffine(splited_image, TransMat,
                           (out_height, out_width)[::-1],#reversed
                           borderValue=255)
#平移時會用到高斯內核去噪點,圖像模糊
這時可以用
def format_letter(im, out_height=32, out_width=32):

    offset_x = int(abs(out_height - im.shape[0]) / 2)
    offset_y = int(abs(out_width - im.shape[1]) / 2)

    im_height, im_width = im.shape

    out = np.ones((out_height, out_width)) * 255
    out[offset_x: offset_x+im_height, offset_y: offset_y+im_width] = im

    return out
 #本來matlab可以直接操作矩陣,但是numpy雖然也可以(通過 numpy.insert),但總是返回新的矩陣,開銷太大,還不如直接複製

# 利用malplotlib畫圖
import matplotlib as plt
plt.ion()
# ...
plt.imshow(image)
plt.pause(2) #持續2s

#或者直接
plt.imshow(image)
#..
plt.show()#顯示所有的圖像,但需要手動關閉
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章