Xử lý ảnh dùng ngôn ngữ lập trình Python

Một phần của tài liệu Xây dựng hệ thống đếm và phân loại sản phẩm theo màu sắc (Trang 36 - 40)

CHƯƠNG 3 : THIẾT KẾ HỆ THỐNG

3.3.1 Xử lý ảnh dùng ngôn ngữ lập trình Python

Thuật tốn xử lý ảnh:

Hình 3. 1: Thuật tốn xử lý ảnh

- Các công đoạn thực hiện xử lý ảnh :  Thu nhận hình ảnh từ camera:

Hình 3. 2: Hình được chụp từ camera

 Chuyển ảnh thu được sang khơng gian màu HSV.

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

Hình 3. 3: Chuyển sang không gian màu HSV

 Chọn ngưỡng cho hệ màu HSV với các màu cần phân loại Với màu đỏ

red_lower = np.array([166, 84, 144], np.uint8) red_upper = np.array([186, 255, 255], np.uint8)

Với màu vàng

yellow_lower = np.array([23, 59, 119], np.uint8) yellow_upper = np.array([54, 255, 255], np.uint8)

Với màu xanh nước biển

blue_lower = np.array([97, 100, 117], np.uint8) blue_upper = np.array([117, 255, 255], np.uint8)

Hình 3. 4: Ảnh nhị phân

red_mask = cv2.inRange(hsv, red_lower, red_upper)

yellow_mask = cv2.inRange(hsv, yellow_lower, yellow_upper) blue_mask = cv2.inRange(hsv, blue_lower, blue_upper)

 Lọc ra các màu được cài đặt

Hình 3. 5: Lọc ra vật màu đỏ

red_mask = cv2.dilate(red_mask, kernal)

res_red = cv2.bitwise_and(frame, frame, mask=red_mask) yellow_mask = cv2.dilate(yellow_mask, kernal)

res_yellow = cv2.bitwise_and(frame, frame, mask=yellow_mask) blue_mask = cv2.dilate(blue_mask, kernal)

res_blue = cv2.bitwise_and(frame, frame, mask=blue_mask)

Hình 3. 6: Khoanh vùng đối tượng và dán nhãn

contours, hierarchy = cv2.findContours(red_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

for pic, contour in enumerate(contours): area = cv2.contourArea(contour)

if (area > 3000):

x, y, w, h = cv2.boundingRect(contour)

frame = cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)

cv2.putText(frame, "Mau Do", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255))

print('Mau Do')

Arduino_serial.write('1'.encode())

contours, hierarchy = cv2.findContours(yellow_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

for pic, contour in enumerate(contours): area = cv2.contourArea(contour)

if (area > 3000):

x, y, w, h = cv2.boundingRect(contour)

cv2.putText(frame, "Mau Vang", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 217))

print('Mau Vang')

Arduino_serial.write('2'.encode())

contours, hierarchy = cv2.findContours(blue_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

for pic, contour in enumerate(contours): area = cv2.contourArea(contour)

if (area > 3000):

x, y, w, h = cv2.boundingRect(contour)

frame = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)

cv2.putText(frame, "Mau xanh", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0))

print('Mau xanh')

Arduino_serial.write('3'.encode()) Arduino_serial.write('0'.encode())

 Đồng thời, ta phân loại thơng qua tín hiệu xuất hiện của đối tượng cần phân loại và gửi tín hiệu phân loại về Arduino.

Trong đó: 1 – màu đỏ 2 – màu vàng 3 – màu xanh

Một phần của tài liệu Xây dựng hệ thống đếm và phân loại sản phẩm theo màu sắc (Trang 36 - 40)

Tải bản đầy đủ (DOCX)

(52 trang)
w