You are on page 1of 6

Digital Imaging Processing Lab

Lab 12

Muhammad Abdullah (298161)


BSCS 9C

CODE:
import cv2 as cv
import numpy as np
import math

def orso_method(size):
    kernel = np.zeros((size, size), dtype=np.uint8)
    center = math.floor(size/2)
    for i in range(len(kernel)):
        if i < center:
            if i == 0:
                kernel[i, center] = 1
            else:
                counter = i
                while True:
                    kernel[i, center] = 1
                    if counter == 0:
                        break
                    else:
                        kernel[i, center - counter] = 1
                        kernel[i, center + counter] = 1
                        counter -= 1
        elif i > center:
            if i == (len(kernel)-1):
                kernel[i, center] = 1
            else:
                for k in range(len(kernel[i])):
                    kernel[i, k] = kernel[center - (i - center), k]
        else:
            for j in range(len(kernel[i])):
                kernel[i, j] = 1
    return kernel

def add_color(img):

    colors = ["Red", "Green", "Blue", "Yellow", "Brick"]


    values = [[255, 0, 0], [0, 255, 0], [
        0, 0, 255], [255, 255, 0], [156, 102, 31]]
    for i in range(len(colors)):
        print("Press ", i, " To Select ", colors[i], " Color.")
    input_value = int(input())
    color_value = values[input_value]

    img = cv.cvtColor(img, cv.COLOR_GRAY2BGR)


    labels_value = cv.connectedComponentsWithStats(objects, 8)
    labels_value = labels_value[2]

    object_banana = labels_value[1]
    object_peach = labels_value[2]

    for i in range(len(img)):
        for j in range(len(img[i])):
            if i >= object_banana[1]:
                if i >= object_peach[1] and j >= object_peach[0]:
                    if img[i, j, 0] == 0 and img[i, j, 1] == 0 and img[i, j,
2] == 0:
                        continue
                    else:

                        img[i, j, 0] = color_value[2]
                        img[i, j, 1] = color_value[1]
                        img[i, j, 2] = color_value[0]
                else:
                    if img[i, j, 0] == 0 and img[i, j, 1] == 0 and img[i, j,
2] == 0:
                        continue
                    else:
                        img[i, j, 0] = color_value[2]
                        img[i, j, 1] = color_value[1]
                        img[i, j, 2] = color_value[0]
            if i >= object_peach[1] and j >= object_peach[0]:
                if img[i, j, 0] == 0 and img[i, j, 1] == 0 and img[i, j, 2] ==
0:
                    continue
                else:
                    img[i, j, 0] = color_value[2]
                    img[i, j, 1] = color_value[1]
                    img[i, j, 2] = color_value[0]
    return img

def clearing_object(img):

    img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

    ret, thresh = cv.threshold(img, 150, 255, cv.THRESH_OTSU)

    kernel1 = cv.getStructuringElement(cv.MORPH_ELLIPSE, (23, 23))

    kernel = orso_method(25)

    ellipse_output = cv.morphologyEx(thresh, cv.MORPH_CLOSE, kernel1)


    circular_output = cv.morphologyEx(ellipse_output, cv.MORPH_CLOSE, kernel)
    kernel2 = orso_method(5)

    erosion = cv.erode(circular_output, kernel2, iterations=1)


    return erosion

if __name__ == "__main__":

    img = cv.imread("image_lab12.png")
    objects = clearing_object(img)
    colored_objects = add_color(objects)
    cv.imshow("Bounding Box.png", colored_objects)
    cv.waitKey(0)

OUTPUTS:

You might also like