การตรวจจับบริเวณตัวเลขบนหน้าปัดมิเตอร์น้ำด้วย Python, Opencv
1. import ต่อ library
import os
from PIL import Image
import cv2
import imutils
import numpy as np
2. อ่านภาพ
img = cv2.imread(“1615817564151.jpg”)
3. ทำภาพให้เบลอ
imgBlurred = cv2.GaussianBlur(img, (5,5), 0)
4. แปลงภาพเป็น gray scale
gray = cv2.cvtColor(imgBlurred, cv2.COLOR_BGR2GRAY)
5. หาเส้นแนวตั้งด้วย edge detection
sobelx = cv2.Sobel(gray,cv2.CV_8U,1,0,ksize=3)
6. ทำ threshold
ret2,threshold_img = cv2.threshold(sobelx,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
7. ปรับปรุงภาพ
element = cv2.getStructuringElement(shape=cv2.MORPH_RECT, ksize=(17, 3))
morph_img_threshold = threshold_img.copy()
cv2.morphologyEx(src=threshold_img, op=cv2.MORPH_CLOSE, kernel=element, dst=morph_img_threshold)
8. ทำการติดฉลากให้วัตถุ
contours, hierarchy= cv2.findContours(morph_img_threshold,mode=cv2.RETR_EXTERNAL,method=cv2.CHAIN_APPROX_NONE)
9. วนลูปในแต่ละวัตถุ
for i,cnt in enumerate(contours):
min_rect = cv2.minAreaRect(cnt)
#print(min_rect)
if validateRotationAndRatio(min_rect):
10. ตัดออกมาทีละวัตถุ
x,y,w,h = cv2.boundingRect(cnt)
p_img=img[y:y+h,x:x+w]
img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
พอได้บริเวณเฉพาะตัวเลขมาแล้วนั้น
11. เอาบริเวณเฉพาะตัวเลขมาทำภาพเป็น gray scale
gray = cv2.cvtColor(p_img, cv2.COLOR_BGR2GRAY) #convert to grey scale
12. ทำ threshold
ret,thresh2 = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
13. ทำการติดฉลากให้วัตถุ
# find contours, sort and draw the biggest one
contours, _ = cv2.findContours(thresh2, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
ทำการเลือกแค่ 3 วัตถุ
contours = sorted(contours, key=cv2.contourArea, reverse=True)[:3]
14. ตัดทีละตัวอักษรออกมา
i = 0
while i < len(contours):
x, y, width, height = cv2.boundingRect(contours[i])
roi = thresh2[y:y+height, x:x+width]
cv2.imwrite(“piece”+str(i)+”.png”, roi)
i += 1
ดึงแต่ละส่วนแล้วบันทึกลงคอมพิวเตอร์
หมายเหตุท้าย:
หากคุณชอบบทความนี้อย่าลืมคลิก❤ด้านล่างเพื่อแนะนำและถ้าคุณมีคำถามใด ๆ แสดงความคิดเห็นและฉันจะพยายามอย่างดีที่สุดที่จะตอบ คุณสามารถติดตามฉันบน facebook page (https://www.facebook.com/nextsoftwarehousethailand/) และสามารถส่งอีเมลถึงฉัน