В проекте я хочу обнаружить точки Брайля на тарелке. Я делаю картинку, на которой делаю свое обнаружение благодаря функции linkedComponentsWithStats. Несмотря на мои попытки, мне так и не удалось получить пороговое значение, при котором обнаруживаются все точки и только они. У меня возникнет та же проблема, если я попытаюсь использовать обнаружение круга. Я пытаюсь использовать сопоставление шаблонов по совету учителя, но у меня также возникают проблемы с обнаружением, поскольку единственным фактором, который на него влияет, является пороговое значение.
import matplotlib.pyplot as plt
img1 = cv.imread(r"traitement\prod.png")
plt.figure(figsize=(40,40))
plt.subplot(3,1,1)
gray_img = cv.cvtColor(img1, cv.COLOR_BGR2GRAY)
test = cv.adaptiveThreshold(gray_img, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY_INV, 11, 6)
_, _, boxes, _ = cv.connectedComponentsWithStats(test)
boxes = boxes[1:]
filtered_boxes = []
for x,y,w,h,pixels in boxes:
if pixels < 1000 and h < 35 and w < 35 and h > 14 and w > 14 and x > 15 and y > 15:
filtered_boxes.append((x,y,w,h))
for x,y,w,h in filtered_boxes:
W = int(w)/2
H = int(h)/2
#print(w)
cv.circle(img1,(x+int(W),y+int(H)),2,(0,255,0),20)
cv.imwrite("gray.png",gray_img)
cv.imwrite("test.png",test)
plt.imshow(test)
plt.subplot(3,1,2)
plt.imshow(img1)
import cv2 as cv
import numpy as np
from imutils.object_detection import non_max_suppression
import matplotlib.pyplot as plt
img = cv.imread('traitement/prod.png')
temp_gray = cv.imread('dot.png',0)
W, H = temp.shape[:2]
thresh = 0.6
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
match = cv.matchTemplate(image=img_gray, templ=temp_gray, method=cv.TM_CCOEFF_NORMED)
(y_points, x_points) = np.where(match >= thresh)
boxes = list()
for (x, y) in zip(x_points, y_points):
# update our list of rectangles
boxes.append((x, y, x + W, y + H))
boxes = non_max_suppression(np.array(boxes))
# loop over the final bounding boxes
for (x1, y1, x2, y2) in boxes:
cv.circle(img,(x1+int(W/2),y1+int(H/2)),2,(255,0,0),15)
plt.figure(figsize=(40,40))
plt.subplot(3,1,1)
plt.imshow(img)
Изображение с адаптивным порогом:
Изображение с обнаружением шаблона:
[img]https:// i.sstatic.net/TYuvR.jpg[/img]
В проекте я хочу обнаружить точки Брайля на тарелке. Я делаю картинку, на которой делаю свое обнаружение благодаря функции linkedComponentsWithStats. Несмотря на мои попытки, мне так и не удалось получить пороговое значение, при котором обнаруживаются все точки и только они. У меня возникнет та же проблема, если я попытаюсь использовать обнаружение круга. Я пытаюсь использовать сопоставление шаблонов по совету учителя, но у меня также возникают проблемы с обнаружением, поскольку единственным фактором, который на него влияет, является пороговое значение. [code]import matplotlib.pyplot as plt
img1 = cv.imread(r"traitement\prod.png")
plt.figure(figsize=(40,40)) plt.subplot(3,1,1)
gray_img = cv.cvtColor(img1, cv.COLOR_BGR2GRAY)
test = cv.adaptiveThreshold(gray_img, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY_INV, 11, 6)
boxes = boxes[1:] filtered_boxes = [] for x,y,w,h,pixels in boxes: if pixels < 1000 and h < 35 and w < 35 and h > 14 and w > 14 and x > 15 and y > 15: filtered_boxes.append((x,y,w,h))
for x,y,w,h in filtered_boxes: W = int(w)/2 H = int(h)/2 #print(w) cv.circle(img1,(x+int(W),y+int(H)),2,(0,255,0),20)