栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

检测工业表的角度

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

检测工业表的角度

import easyocr
import numpy as np
import cv2

霍夫圆变换:检测表盘

def detect_circles(gray, img):
# cv2.imshow(“”,gray)

# circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 100, param2=150, minRadius=160)
# 参数解析,灰度图片,method为检测方法,常用CV_HOUGH_GRADIENT,
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 2,300, param2=80, minRadius=160)
# print(circles)

circles = np.uint16(np.around(circles))  # 把circles包含的圆心和半径的值变成整数
cir = img.copy()
#
for i in circles[0, :1]:
    cv2.circle(cir, (i[0], i[1]), i[2], (0, 255, 0), 10, cv2.LINE_AA)  # 画圆
    cv2.circle(cir, (i[0], i[1]), 2, (0, 255, 0), 10, cv2.LINE_AA)  # 画圆心
#     cv2.imshow("circles", cir)
return cir, circles[0][0]

#计算距离
def dist_o_all(a_,b_):

cent = [int((a_[0] + a_[2]) / 2), int((a_[1] + a_[3]) / 2)]
dis = np.linalg.norm(np.array(cent) - b_)
return dis

box =np.array([[1047, 969, 1132, 1027, 0.40609],
[803, 224, 1994, 1237,0.29581]])

for i in range(4):
if i % 2 ==0:
box[0][i] =box[0][i] -box[1][0]
else:
box[0][i] = box[0][i] - box[1][1]
print(box)
img = cv2.imread(“./img/IMG_3938.JPG”)
h,w = img.shape[:2]
p1, p2 = (int(box[1][0]), int(box[1][1])), (int(box[1][2]), int(box[1][3]))
cv2.rectangle(img, p1, p2, (0,0,255), thickness=1, lineType=cv2.LINE_AA)
img_ocr = img[int(box[1][1]):int(box[1][3]),int(box[1][0]):int(box[1][2])]

img = cv2.resize(img,(1080,720)) cv2.imshow(“1”,img) cv2.imshow(“2”,img_ocr) nor = img_ocr.normalized_picture()

img_ocr_gary = cv2.cvtColor(img_ocr,cv2.COLOR_BGR2GRAY)
cir, circles= detect_circles(img_ocr_gary,img_ocr)
print(circles)
cv2.imshow(“3”,cir)

cv2.waitKey(0) np.linalg.norm()

reader = easyocr.Reader([“ch_sim”],model_storage_directory=“./weight”)
result_ocr = reader.readtext(img_ocr)

value_dict = {}

for res in result_ocr:
# print(res)
if res[2] >0.7:
try:
numerical_value = float(res[1])
except:
continue
res[0][0] = int(res[0][0][0]),int(res[0][0][1])
res[0][2] = int(res[0][2][0]), int(res[0][2][1])
# print(res)
cent = [int((res[0][0][0] + res[0][2][0])/2) , int((res[0][0][1] + res[0][2][1])/2)]
dis = np.linalg.norm(np.array(cent)-circles[:2])
if dis > int(circles[2] /2) :
value_dict[numerical_value] = np.array(cent)

cent_0 =np.array([int((box[0][0] + box[0][2]) / 2), int((box[0][1] + box[0][3]) / 2)])
value_sorted = sorted(value_dict.items())
value_0 = sorted(value_dict.items(),key=lambda a:dist_o_all(box[0][:4],a[1]))

first = value_sorted[0]
scend = value_sorted[1]
a = first[1] - circles[:2]
b = scend[1] - circles[:2]

夹角cos值

cos_vale = np.dot(a,b)/(np.linalg.norm(a)*np.linalg.norm(b))
arcos = np.arccos(cos_vale)
a_0 =cent_0 - circles[:2]
b_0 = value_0[0][1] - circles[:2]

cos_0 = np.dot(a_0,b_0)/(np.linalg.norm(a_0)*np.linalg.norm(b_0))
arcos_0 = np.arccos(cos_0)
differential_value = scend[0]-first[0]
differential_value = differential_value/arcos

true_val = arcos_0*differential_value

print(value_0[0][0]-true_val)

cos_0 = print(cos_) 夹角sin值 cv2.imshow(“1”,img_ocr)

cv2.waitKey(0)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号