Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Detection of rust with OpenCV (Python) Part 2

This is a follow up to the previous post: Detection of rust with OpenCV (Python)

After reading through the comments on the previous post, we tried working in HSV instead of BGR. However, there wasn't too much of a difference.

Result

This is our current code with reference from here: Colour Detection HSV

import cv2 
import numpy as np

img = cv2.imread('/home/brendanloe/img.jpeg', 1)

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

boundaries1 = [ ([169, 100 , 100], [189, 255, 255]) ]
boundaries2 = [ ([3, 100, 100], [17, 255, 255]) ]
boundaries3 = [ ([2, 100, 100], [22, 255, 255]) ]
boundaries4 = [ ([6, 100, 100], [26, 255, 255]) ]

for (lower1, upper1) in boundaries1:
    lower1 = np.array(lower1, dtype = "uint8")
    upper1 = np.array(upper1, dtype = "uint8")
    mask = cv2.inRange(hsv, lower1, upper1)
    output1 = cv2.bitwise_and(img, img, mask = mask)

for (lower2, upper2) in boundaries2:
    lower2 = np.array(lower2, dtype = "uint8")
    upper2 = np.array(upper2, dtype = "uint8")
    mask = cv2.inRange(hsv, lower2, upper2)
    output2 = cv2.bitwise_and(img, img, mask = mask)
for (lower3, upper3) in boundaries3:
    lower3 = np.array(lower3, dtype = "uint8")
    upper3 = np.array(upper3, dtype = "uint8")
    mask = cv2.inRange(hsv, lower3, upper3)
    output3 = cv2.bitwise_and(img, img, mask = mask)
for (lower4, upper4) in boundaries4:
    lower4 = np.array(lower4, dtype = "uint8")
    upper4 = np.array(upper4, dtype = "uint8")
    mask = cv2.inRange(hsv, lower4, upper4)
    output4 = cv2.bitwise_and(img, img, mask = mask)

final = cv2.bitwise_or(output1, output2, output3)
final1 = cv2.bitwise_or(output4, final)
cv2.imshow("final", final1)

while(1):
    k = cv2.waitKey(0)
    if(k == 27):
        break

cv2.destroyAllWindows()

How can we remove the yellow colour "parking" sign which is still showing in our output? Is it because we are using a jpeg image?

Detection of rust with OpenCV (Python) Part 2

This is a follow up to the previous post: Detection of rust with OpenCV (Python)

Original Image: Rust Image

After reading through the comments on the previous post, we tried working in HSV instead of BGR. However, there wasn't too much of a difference.

Result

This is our current code with reference from here: Colour Detection HSV

import cv2 
import numpy as np

img = cv2.imread('/home/brendanloe/img.jpeg', 1)

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

boundaries1 = [ ([169, 100 , 100], [189, 255, 255]) ]
boundaries2 = [ ([3, 100, 100], [17, 255, 255]) ]
boundaries3 = [ ([2, 100, 100], [22, 255, 255]) ]
boundaries4 = [ ([6, 100, 100], [26, 255, 255]) ]

for (lower1, upper1) in boundaries1:
    lower1 = np.array(lower1, dtype = "uint8")
    upper1 = np.array(upper1, dtype = "uint8")
    mask = cv2.inRange(hsv, lower1, upper1)
    output1 = cv2.bitwise_and(img, img, mask = mask)

for (lower2, upper2) in boundaries2:
    lower2 = np.array(lower2, dtype = "uint8")
    upper2 = np.array(upper2, dtype = "uint8")
    mask = cv2.inRange(hsv, lower2, upper2)
    output2 = cv2.bitwise_and(img, img, mask = mask)
for (lower3, upper3) in boundaries3:
    lower3 = np.array(lower3, dtype = "uint8")
    upper3 = np.array(upper3, dtype = "uint8")
    mask = cv2.inRange(hsv, lower3, upper3)
    output3 = cv2.bitwise_and(img, img, mask = mask)
for (lower4, upper4) in boundaries4:
    lower4 = np.array(lower4, dtype = "uint8")
    upper4 = np.array(upper4, dtype = "uint8")
    mask = cv2.inRange(hsv, lower4, upper4)
    output4 = cv2.bitwise_and(img, img, mask = mask)

final = cv2.bitwise_or(output1, output2, output3)
final1 = cv2.bitwise_or(output4, final)
cv2.imshow("final", final1)

while(1):
    k = cv2.waitKey(0)
    if(k == 27):
        break

cv2.destroyAllWindows()

How can we remove the yellow colour "parking" sign which is still showing in our output? Is it because we are using a jpeg image?