Python 3.x 使用python opencv的OMR气泡纸扫描仪
我正在使用OMR气泡纸扫描仪,使用python openCV检测正确的气泡答案。当使用下面的代码执行时,我没有得到正确的答案。谁能帮我检查一下密码,告诉我哪里出错了 我尝试了下面的URL图像Python 3.x 使用python opencv的OMR气泡纸扫描仪,python-3.x,opencv,hough-transform,canny-operator,omr,Python 3.x,Opencv,Hough Transform,Canny Operator,Omr,我正在使用OMR气泡纸扫描仪,使用python openCV检测正确的气泡答案。当使用下面的代码执行时,我没有得到正确的答案。谁能帮我检查一下密码,告诉我哪里出错了 我尝试了下面的URL图像 将cv2作为cv导入 将numpy作为np导入 image=cv.imread(“H:/omr\u test\u 01.png”,0) image1=cv.imread(“H:/omr\u test\u 01.png”) 正确答案=['B'、'E'、'A'、'C'、'B'] crop_img=图像[157
将cv2作为cv导入
将numpy作为np导入
image=cv.imread(“H:/omr\u test\u 01.png”,0)
image1=cv.imread(“H:/omr\u test\u 01.png”)
正确答案=['B'、'E'、'A'、'C'、'B']
crop_img=图像[157:975,42:330]
#打印(裁剪图像)
答案=[]
itr=0
对于范围(2)内的itr:
如果itr==0:
img1=作物产量(img)[0:818,0:120]
其他:
img1=作物的img[0:818167:288]
img1=cv.GaussianBlur(img1,(5,5),0)
img1=cv.Canny(IMG1100200)
img1=cv.自适应阈值(IMG1255,cv.自适应阈值平均值,cv.阈值二进制值,11,2)
img1=cv.自适应阈值(IMG1255,cv.自适应阈值平均值,cv.阈值二进制值,11,2)
img1=cv.自适应阈值(IMG1255,cv.自适应阈值平均值,cv.阈值二进制值,11,2)
img1=cv.自适应阈值(IMG1255,cv.自适应阈值平均值,cv.阈值二进制值,11,2)
img1=cv.自适应阈值(IMG1255,cv.自适应阈值平均值,cv.阈值二进制值,11,2)
img1=cv.GaussianBlur(img1,(5,5),0)
img=img1
img=等速历史(img)
cimg=cv.CVT颜色(img,cv.COLOR_GRAY2BGR)
打印(cimg)
img1=cv.Canny(IMG1100200)
img1=cv.Canny(IMG1100200)
img1=cv.Canny(img1,0255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)[1]
img1=cv.GaussianBlur(img1,(5,5,1)
img1=cv.GaussianBlur(img1,(5,5,1)
圆=cv.HOUGH圆(img,cv.HOUGH_梯度,1,10,参数1=50,参数2=50,最小半径=0,最大半径=0)
圆=np.uint16(np.around(圆))
k=0
对于圆[0,:]中的i:
等速圆(cimg,(i[0],i[1]),2,(0255,0),3)
k=k+1
cv.waitKey(0)
cv.destroyAllWindows()
对于范围(k)内的i:
答案。追加(圆圈[0][i][0]+圆圈[0][i][1]+圆圈[0][i][2])
表=len(答案)
最终答案=[]
对于范围(0,5)内的i:
j=i
ind=0
索引=ind
索引=0
max=答案[j]
对于范围(i+1)内的j:
现在能用了吗?现在能用了吗?
import cv2 as cv
import numpy as np
image = cv.imread("H:/omr_test_01.png",0)
image1 = cv.imread("H:/omr_test_01.png")
correct_answers = ['B','E','A','C','B']
crop_img = image[157:975, 42:330]
#print(crop_img)
answers = []
itr = 0
for itr in range(2):
if itr ==0:
img1 = crop_img[0:818, 0:120]
else:
img1 = crop_img[0:818, 167:288]
img1 = cv.GaussianBlur(img1,(5,5),0)
img1 = cv.Canny(img1,100,200)
img1 = cv.adaptiveThreshold(img1,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,11,2)
img1 = cv.adaptiveThreshold(img1,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,11,2)
img1 = cv.adaptiveThreshold(img1,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,11,2)
img1 = cv.adaptiveThreshold(img1,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,11,2)
img1 = cv.adaptiveThreshold(img1,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,11,2)
img1 = cv.GaussianBlur(img1,(5,5),0)
img = img1
img = cv.equalizeHist(img)
cimg = cv.cvtColor(img,cv.COLOR_GRAY2BGR)
print(cimg)
img1 = cv.Canny(img1,100,200)
img1 = cv.Canny(img1,100,200)
img1 = cv.Canny(img1,0,255,cv.THRESH_BINARY_INV | cv.THRESH_OTSU)[1]
img1 = cv.GaussianBlur(img1,(5,5),1)
img1 = cv.GaussianBlur(img1,(5,5),1)
circles = cv.HoughCircles(img,cv.HOUGH_GRADIENT,1,10,param1=50,param2=50,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
k=0
for i in circles[0,:]:
cv.circle(cimg,(i[0],i[1]),2,(0,255,0),3)
k = k+1
cv.waitKey(0)
cv.destroyAllWindows()
for i in range(k):
answers.append(circles[0][i][0]+circles[0][i][1]+circles[0][i][2])
sheet = len(answers)
final_answers = []
for i in range(0,5):
j = i
ind = 0
index = ind
index = 0
max = answers[j]
for j in range(i+1):
if max<=answers[j]:
max = answers[j]
ind = ind+1
index = ind
if index == 0:
final_answers.append('A')
if index == 1:
final_answers.append('B')
if index == 2:
final_answers.append('C')
if index == 3:
final_answers.append('D')
if index == 4:
final_answers.append('E')
mark = 0
itrr = len(final_answers)
for i in range(itrr):
if final_answers[i]==correct_answers[i]:
mark = mark+1
print(final_answers)
print(mark)
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(image1,'Marks:2/5', (20,450), font, 2,(0,0,255),3,cv.LINE_AA)
cv.imshow('marks',image1)
cv.waitKey(0)
cv.destroyAllWindows()