图片:
代码:
# @time: 2022/2/14 10:29
# @Author: wangshubo
# @File: Ocr_digital_dect.py
# @description: 油表数字检测
# @author_email: '971490321@qq.com'
import cv2
import cv2 as cv
import numpy as np
from utilsW.utils import cvShow, ContrastChange
if __name__ == '__main__':
#1, load image
src = cv.imread("D:/images/numDect.jpg")
cvShow("src", src)
#2, 图像对比度增强
ContrastImg = ContrastChange(src)
cvShow("ContrastImg", ContrastImg)
#3,灰度化,高斯模糊
grayImg = cv.cvtColor(ContrastImg, cv.COLOR_BGR2GRAY)
cvShow("grayImg", grayImg)
blurImg = cv.GaussianBlur(grayImg, (5,5), 1)
cvShow("blurImg", blurImg)
#4, 阈值处理
thresholdImg = cv.threshold(blurImg, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)[1]
cvShow("thresholdImg", thresholdImg)
#5,找轮廓
contours = cv.findContours(thresholdImg, cv.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
drawImg = src.copy()
cv.drawContours(drawImg, contours, -1, (0,0,255), 2)
cvShow("drawImg", drawImg)
words = []
for c in contours:
rect = list(cv.boundingRect(c))
words.append(rect)
#6, 按照每一个矩形框x取值进行排序
contours = sorted(words, key=lambda s:s[0])[:5]
for item in contours:
x = item[0]
y = item[1]
w = item[2]
h = item[3]
sigleimg = src[y: y+h, x:x+w]
cvShow("sigleimg", sigleimg)
函数cvShow
def cvShow(name, img):
cv.imshow(name, img)
cv.waitKey(0)
# cv.destroyAllWindows()
函数ContrastChange
# 图像对比度增强
def ContrastChange(image):
alpha = np.array([1.80])
img = cv.multiply(image, alpha, image)
return img