Привет Мохд Анас Хан.
Ваш подход к определению логотипа слишком прост, поэтому он не может работать. Если вам нужен подход на уровне продуктов, используйте машинное обучение или глубокое обучение. Если вы хотите всего несколько игрушек, тогда должен работать простой искатель с фиксированными правилами.
Например, в следующем подходе я определил «логотип» как «контур, который имеет наибольшую площадь». Позже вам понадобятся дополнительные правила, так что удачи.
import numpy as np
import cv2
im = cv2.imread('contours_1.jpg')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255, cv2.THRESH_BINARY_INV)
rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
threshed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, rect_kernel)
cv2.imwrite("contours_1_thres.jpg", threshed)
im2, contours, hierarchy = cv2.findContours(threshed,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
ws = []
hs = []
areas = []
for contour in contours:
area = cv2.contourArea(contour)
x, y, w, h = cv2.boundingRect(contour)
print("w: {}, h: {}, area: {}".format(w, h, area))
ws.append(w)
hs.append(h)
areas.append(area)
max_idx = np.argmax(areas)
cv2.drawContours(im, [contours[max_idx]], -1, (0, 255, 0), 3)
# cv2.drawContours(im, contours, -1, (0, 255, 0), 3)
cv2.imwrite("contours_1_test.jpg", im)
Выводятся следующие изображения: (Обнаруженный логотип находится в зеленом поле)