OpenCV Более плавный контурPython

Программы на Python
Anonymous
OpenCV Более плавный контур

Сообщение Anonymous »

Я пытаюсь решить проблему создания контуров вокруг логотипов с помощью OpenCV.
Я прикрепил два изображения: tekst.png и tekst2.png. Я также прикрепил изображение comparison.png, которое показывает желаемый результат (созданный вручную) и результат, который я сейчас получаю с помощью своей программы.
Если у кого-нибудь есть любые советы, буду очень признателен!
Краткое описание желаемого решения:
  • Возвращает один внешний контур, максимально приближенный к логотипу.
  • Я могу использовать контур, упомянутый в последнем предложении, чтобы увеличить его и создать отступ между логотипом и контуром.
  • Я могу использовать контур, упомянутый в последнем предложении, чтобы увеличить его и создать отступ между логотипом и контуром.
  • li>
    Какой-то алгоритм сглаживания готового контура
Код, который у меня сейчас есть:

def current_milli_time():
return round(time.time() * 1000)

def time_calculation_start():
timing.append(current_milli_time())

def time_calculation_end(string):
timing.append(current_milli_time())
print(str(string) + ": ", timing[1] - timing[0], "ms")
timing.clear()

def render_png(filename):
print(filename)
time_calculation_start()
original_image = cv2.imread(str(filename), cv2.IMREAD_UNCHANGED)
copy = original_image.copy() # Saved for imagecreation
time_calculation_end("Setup")

time_calculation_start()
if(original_image.shape[2] == 4):
b,g,r,mask = cv2.split(original_image)
time_calculation_end("Mask")

# Reduce outer turdss
time_calculation_start()
kernel = np.ones((3,3), np.uint8)
dilation = cv2.dilate(mask,kernel,iterations = 2)
dilation = cv2.erode(dilation,kernel,iterations = 1)
time_calculation_end("Dialtion")
time_calculation_start()
gaublur = cv2.GaussianBlur(dilation,(16,16),0)
time_calculation_end("Gaussian blur")

#Find contours
time_calculation_start()
contours, hierarchy = cv2.findContours(gaublur, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
time_calculation_end("Find contours")

print("\tContour layers: ", len(contours))

# Draw contours
time_calculation_start()
cv2.drawContours(copy, contours, -1, (0, 255, 0, 255),1)
time_calculation_end("Draw contours")
print("\n")

cv2.imwrite(str(render_path) + str(filename), copy)


Подробнее здесь: https://stackoverflow.com/questions/667 ... er-contour

Вернуться в «Python»