做自動(dòng)采集電影網(wǎng)站有什么處罰上海網(wǎng)絡(luò)推廣培訓(xùn)機(jī)構(gòu)
1.目的
在學(xué)校的學(xué)習(xí)過程中,需要遞交許多材料,且每份材料上都需要對應(yīng)負(fù)責(zé)人簽名,有時(shí)候找別人要簽名,然后自己粘貼的話,會出現(xiàn)簽名模糊,背景不是純白透明。為此以word中的“顏色+校正”功能為參照,進(jìn)行OpenCV代碼實(shí)現(xiàn)。
舉例?
手寫的一個(gè)簽名:
圖像會有陰影,且字體模糊?
?
2. 解決思路
首先通過算法來完成前景與背景的分離,再使用形態(tài)學(xué)方法來恢復(fù)圖像清晰度。
- 使用canny邊緣檢測來獲取圖像中字跡的輪廓
- 使用形態(tài)學(xué)方法來恢復(fù)圖像清晰度
- 使用顏色反轉(zhuǎn)來獲得白底黑字的簽名
代碼:
import cv2# 讀取圖像
image = cv2.imread(r'D:\papercode\AI\Ai-Dentist-Sample-Code-main\opencv\image\02.jpg')width = image.shape[1] // 2
height = image.shape[0] // 2
image = cv2.resize(image,(width, height),interpolation = cv2.INTER_AREA )
# cv2.imshow('a',image)
# 將圖像轉(zhuǎn)換為灰度
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# cv2.imshow('gray',gray_image)edges = cv2.Canny(gray_image, 100, 200)
# cv2.imshow('canny',edges)
# 創(chuàng)建一個(gè)結(jié)構(gòu)元素,通常使用一個(gè)圓形的結(jié)構(gòu)元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))# 應(yīng)用膨脹操作
edges = cv2.dilate(edges, kernel, iterations=1)
# cv2.imshow('canny1',edges)
#嘗試腐蝕來斷偏旁部首的粘連
# kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))
# edges = cv2.erode(edges, kernel, iterations=1)
# cv2.imshow('canny02',edges)
kernel1 = cv2.getStructuringElement(cv2.MORPH_RECT, (4, 4))
closing = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel1)
# cv2.imshow('canny2',closing)
# # 應(yīng)用高斯模糊
# blurred_image = cv2.GaussianBlur(closing, (5, 5), 0)
# cv2.imshow('blurred_image',blurred_image)
# # 應(yīng)用 Laplacian 銳化
# sharpened_image = cv2.Laplacian(closing, cv2.CV_64F)
# cv2.imshow('l',sharpened_image)
# 應(yīng)用中值濾波
# smoothed_image = cv2.medianBlur(blurred_image, 5)
# cv2.imshow('se',smoothed_image)background = cv2.bitwise_not(closing)# 顯示結(jié)果
cv2.imshow('Background', background)
cv2.waitKey(0)
cv2.destroyAllWindows()
2.1 canny邊緣檢測
edges = cv2.Canny(gray_image, 100, 200)?
參數(shù)分別為輸入圖像,最小閾值和最大閾值
結(jié)果如下:自己輪廓提取的效果還是不錯(cuò)的。因?yàn)镺penCV中一般白色為前景,所以需要將白色輪廓進(jìn)行填充,需要用到形態(tài)學(xué)方法
?
2.2 膨脹操作
edges = cv2.dilate(edges, kernel, iterations=1)
可以看到,字跡有一定的填充,擔(dān)任存在一些小的空洞,這個(gè)就需要用到閉運(yùn)算了,來消除白色區(qū)域中的小黑塊
?
2.3 閉運(yùn)算
closing = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel1)
?可以看到,幾乎多有的小黑塊都被填充完畢,但是出現(xiàn)意料外的情況。在“圖”字中,外面的口和里面的冬連在了一起,因?yàn)楸旧碓瓐D片中這兩個(gè)結(jié)構(gòu)就挨得很近,且為了最大限度地填充小黑塊,進(jìn)行膨脹時(shí)就容易粘連在一起了。
?
2.4 顏色反轉(zhuǎn)
background = cv2.bitwise_not(closing)
為了得到白底黑字的效果,還需要進(jìn)行顏色反轉(zhuǎn),效果如下圖。由于形態(tài)學(xué)變換中的核取值過大,字跡出現(xiàn)了毛刺,且筆畫不流暢。
?
3. 不足與嘗試
代碼中有使用高斯濾波和中值濾波來嘗試去除毛刺。但是高斯濾波后,筆畫流暢了字跡卻又模糊了,且中值濾波效果不大。
高斯濾波結(jié)果:
中值濾波結(jié)果:
雙邊濾波結(jié)果:
?
?