Detecting Spongebob Characters

Kategori: Computer Vision , 09 Mart 2020 , JanFranco


Bu yazımızda daha önce gördüğümüz Image Processing tekniklerini kullanarak, Spongebob ve Patrick karakterlerini tespit edip, dikdörtgen içine alacağız. OpenCV kütüphanesini kullanarak Python üzerinden başlayalım. İlk olarak kütüphaneleri ve resmi alalım:


import cv2
import matplotlib.pyplot as plt

img = cv2.imread('spongebob.png')
img2show = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
plt.imshow(img2show)
plt.show()
>>



Threshold almadan önce resmi gürültülerden temizlemek için blurlayalım:


blurredImg = cv2.GaussianBlur(img, (11, 11), 15)
img2how = cv2.cvtColor(blurredImg, cv2.COLOR_RGB2BGR)
plt.imshow(img2how)
plt.show()
>>



Resmi grayscale hale çevirelim:


grayImg = cv2.cvtColor(blurredImg, cv2.COLOR_RGB2GRAY)
plt.imshow(grayImg, cmap='gray')
plt.show()


Threshold alalım:


_, threshold = cv2.threshold(grayImg, 130, 255, cv2.THRESH_BINARY)
plt.imshow(threshold, cmap='gray')
plt.show()
>>



Kenarlar iyice belirginleştirmek için Laplace yöntemini kullanalım:


laplace = cv2.Laplacian(threshold, -1, ksize=7)
plt.imshow(laplace, cmap='gray')
plt.show()


Contourları bulalım. Contourları sıralayalım ve en büyük contour (dış resim) haricindeki ilk iki contouru kullanarak dikdörtgenleri çizelim:


_, contours, hierarchy = cv2.findContours(laplace, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)
sortedContours = sorted(contours, key=lambda x: cv2.contourArea(x), reverse=True)
x, y, w, h = cv2.boundingRect(sortedContours[1])
cv2.rectangle(img2show, (x, y), (x + w, y + h), (0, 255, 0), 8)
x, y, w, h = cv2.boundingRect(sortedContours[2])
cv2.rectangle(img2show, (x, y), (x + w, y + h), (255, 0, 0), 8)
plt.imshow(img2show)
plt.show()
>>


Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın