Моя цель - убедиться, что на черном проводе есть какая-то лента. (лента с указанием c цвета Красный, желтый, синий)
Теперь я могу обнаружить ленту на проводе.
Но я понятия не имею, как обнаружить провод и проверить, что у него есть область пересечения.
Это мой код:
import numpy as np
import cv2
def load_image(path_img):
return cv2.imread(path_img)
def bgr2hsv(img):
return cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
def setRangeColor(hsv, lower_color, upper_color):
return cv2.inRange(hsv, lower_color, upper_color)
def contours_img(mask):
contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
return contours
def filter_contours_img(contours, img_draw, color_bbox):
count = 0
for c in contours:
rect = cv2.boundingRect(c)
x,y,w,h = rect
area = w * h
if area > 1000:
count = count + 1
cv2.rectangle(img_draw, (x, y), (x+w, y+h), color_bbox, 5)
return img_draw, count
def draw_text_on_image(img_draw, count_yellow, count_red, count_blue):
cv2.rectangle(img_draw, (0, 0), (500, 170), (0,0,0), -1)
cv2.putText(img_draw,'Red Count : ' + str(count_red),
(10,50), # bottomLeftCornerOfText
cv2.FONT_HERSHEY_SIMPLEX, # font
1.5, # fontScale
(0,255,255), # fontColor
2) # lineType
cv2.putText(img_draw,'Yellow Count : ' + str(count_yellow),
(10,100), # bottomLeftCornerOfText
cv2.FONT_HERSHEY_SIMPLEX, # font
1.5, # fontScale
(0,255,255), # fontColor
2) # lineType
cv2.putText(img_draw,'blue Count : ' + str(count_blue),
(10,150), # bottomLeftCornerOfText
cv2.FONT_HERSHEY_SIMPLEX, # font
1.5, # fontScale
(0,255,255), # fontColor
2) # lineType
return img_draw
def main():
path_img = 'images/ph14.jpg'
img = load_image(path_img)
#cv2.imshow('img_title',img)
#img = cv2.resize(img, None,fx=0.5,fy=0.5)
hsv = bgr2hsv(img)
img_draw = img
# define range of Yellow color in HSV
lower_Yellow = np.array([20,100,100])
upper_Yellow = np.array([30,255,255])
mask = setRangeColor(hsv, lower_Yellow, upper_Yellow)
contours = contours_img(mask)
color_bbox = (0, 255, 0)
img_draw, count_yellow = filter_contours_img(contours, img_draw, color_bbox)
print('Yellow Count:', count_yellow)
# define range of Red color in HSV
lower_Red = np.array([0,125,125])
upper_Red = np.array([10,255,255])
mask0 = setRangeColor(hsv, lower_Red, upper_Red)
contours = contours_img(mask0)
color_bbox = (0, 125, 255)
img_draw, count_red0 = filter_contours_img(contours, img_draw, color_bbox)
#print('Red Count:', count_red)
# upper mask (170-180)
lower_red = np.array([170,100,100]) #170
upper_red = np.array([180,255,255]) #180
mask1 = cv2.inRange(hsv, lower_red, upper_red)
contours = contours_img(mask1)
color_bbox = (0, 125, 255)
img_draw, count_red1 = filter_contours_img(contours, img_draw, color_bbox)
count_red = count_red0 + count_red1
print('Red Count:', count_red)
# define range of Blue color in HSV
lower_Blue = np.array([100,125,125])
upper_Blue = np.array([125,255,255])
mask = setRangeColor(hsv, lower_Blue, upper_Blue)
contours = contours_img(mask)
color_bbox = (255, 0, 255)
img_draw, count_blue = filter_contours_img(contours, img_draw, color_bbox)
img_draw = draw_text_on_image(img_draw, count_yellow, count_red, count_blue)
print('Blue Count:', count_blue)
cv2.imwrite('output/output_IMG_ph14.png', img_draw)
if __name__ == '__main__':
main()
Я думаю, что мой окончательный результат может показать результат, как показано ниже. (Зеленая цветная линия не обязательна.)
Это более детализированное изображение ** (красное обнаружено более 1) в этом случае ** я думаю, что если я смогу обнаружить черный провод , я смогу проверить правильность обнаружения.
введите описание изображения здесь