|
|
|
import cv2
|
|
|
|
|
|
|
|
# Constant variables definition.
|
|
|
|
DESIRED_HEIGHT = 480 # The input image will be resized to this height, preserving its aspect ratio.
|
|
|
|
BLUE_THRESHOLD = 128 # If the blue channel is bigger than this, it is considered background and removed.
|
|
|
|
|
|
|
|
|
|
|
|
# Function definitions
|
|
|
|
def resizeImage(img):
|
|
|
|
"Resize the input image based on the DESIRED_HEIGHT variable."
|
|
|
|
p = img.shape;
|
|
|
|
aspectRatio = p[0]/p[1]
|
|
|
|
width = DESIRED_HEIGHT*aspectRatio
|
|
|
|
img = cv2.resize(img, ( DESIRED_HEIGHT, int(width) ))
|
|
|
|
return img
|
|
|
|
|
|
|
|
#####################################################################################
|
|
|
|
|
|
|
|
# Read image from source
|
|
|
|
img = cv2.imread('/home/stelios/Desktop/IoT/drone.jpg', cv2.IMREAD_COLOR)
|
|
|
|
|
|
|
|
|
|
|
|
# Resize image to the desired height.
|
|
|
|
img = resizeImage(img)
|
|
|
|
|
|
|
|
imgOriginal = img.copy()
|
|
|
|
|
|
|
|
# Remove BLUE
|
|
|
|
p = img.shape
|
|
|
|
for i in range(p[0]):
|
|
|
|
for j in range(p[1]):
|
|
|
|
if (img[i,j,0] > BLUE_THRESHOLD):
|
|
|
|
img[i,j,:] = 0
|
|
|
|
|
|
|
|
# Convert to grayscale.
|
|
|
|
img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
|
|
|
|
|
|
|
|
#####################################################################
|
|
|
|
|
|
|
|
thres1, img2 = cv2.threshold(img, 1, 255, cv2.THRESH_BINARY)
|
|
|
|
|
|
|
|
im2, contours, hierarchy = cv2.findContours(img2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
|
|
|
|
|
|
|
|
maxContour = max(contours, key = cv2.contourArea)
|
|
|
|
|
|
|
|
cv2.drawContours(imgOriginal, maxContour, -1, (0,0,255), 1)
|
|
|
|
print(len(maxContour))
|
|
|
|
|
|
|
|
x,y,w,h = cv2.boundingRect(maxContour)
|
|
|
|
|
|
|
|
# draw the biggest contour (c) in green
|
|
|
|
cv2.rectangle(imgOriginal,(x,y),(x+w,y+h),(0,20,255),2)
|
|
|
|
|
|
|
|
cv2.imshow('Test', imgOriginal)
|
|
|
|
cv2.waitKey(0)
|
|
|
|
|