Обработка на изображението

Github (код)

สามารถ проект за клониранеในเว็บไซต์นี้ https://github.com/dolabpublic/DOLAB_Blog3

Импортирайте библиотеки и прочетете изображение

import numpy as np
import cv2
path_img = '/workdir/Documents/DOLAB/Medium/Blog#3/IMG_2620.jpg'
img = cv2.imread(path_img)

Преобразувайте BGR в HSV

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

Какво е HSV? (нюанс, наситеност, стойност)

HSV color model เป็นการพิจารณาสีโดยใช้ Hue, Saturation, Value ซึ่งเป็นตัวแทนของระบบสี RGB เพื่อทำให้ง่ายขึ้นในการเราจะคัดแยกสี จริงแล้วทำแบบ RGB หรือ BGR ก็ได้แต่จะ Fine tune ยากกว่า

Нюанс คือ ค่าสีของสีหลัก หรือจะเรียกว่ฉ๔คงเคงดุ

Наситеност คือ ความบริสุทธิ์ของสี

Value คือ ความสว่างของสีซึ่งสามารถวัดได้โดยค่าความเข้มของความสว่างของแต่ละสีเ

Задайте обхват HSV на целта

เมื่อเราแปลง BGR color model มาเป็น HSB color moel แล้ว ดังนั้นเรามาลองกำหนดช่วงสีที่เราต้องการกัน โดยจะเริ่มกำหนดจาก Hue ก่อนแล้วค่อยไปกำหนด Saturation และ Value ซึ่งจาก code ด้านล่างได้กำหนดไว้

# define range of blue color in HSV
lower_blue = np.array([20,180,180])
upper_blue = np.array([40,255,255])
# Threshold the HSV image to get only blue colors
mask = cv2.inRange(hsv, lower_blue, upper_blue)

ทุกคนอาจจะมีคำถามว่า แล้วจะรู้ได้ไงว่าช่วงสีไหน คือค่าเท่าไร ไม่ยากครับ เดี๋ยวเราจะนำเทคนิคการดูให้ครับ

ข้อควรระวัง

จะสังเกตุได้ว่าค่าสีของ Hue ที่วัดดังรูป Fig 3. เนื่องจากเราต้องนำมาแปลงค่าก่อนเพื่อให้อยู่ค่า Max เท่ากัน

ยกตัวอย่าง

ค่า Hue ในโปรแกรมที่วัดมา มีค่า Max อยู่ 360 องศา ซึ่งใน OpenCV มีค่า Max อยู่ที่ 255 จะสังเกตุได้ว่าค่า Max ไม่เท่ากันจึงไม่สามารถ นำ ตัว เลข ใน นั้น ไป ใช้ ได้ ดัง นั้น เรา จึง ควร นำ ค่า 44 องศา มา คำ นวน ใหม่ จะ ได้ 31.16 ที่ ค่า ค่า max ที่ 255

สำหรับโปรแกรมดูดสีใน Windows и Paint

ถ้า เป็น Windows ก็ สามารถ ใช้ โปรแกรม боя ได้ แล้ว ดูด สี ขึ้น มา ดู ดู นะ ครับ สำหรับ หน้าตา โปรแกรม โปรแกรม มี รูปแนบ ไว้ ให้ นะ ครับ เผื่อ เผื่อ ไม่ ออก 5555

เมื่อนำ маска มา покажи จะได้ดังรูป Фиг. 6.

cv2.imwrite('/workdir/Documents/DOLAB/Medium/Blog#3/output/mask.png',mask)

Създайте контури на изображението

นำ เทคนิค Контури ใน Opencv มา ประยุกต์ เพื่อ นำ มา จับ Object ที่ ต้อง แล้ว นำ นำ เทคนิค เทคนิค Приблизително เพื่อ มา ช่วย ประมาณ Контури

im2, contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
   rect = cv2.boundingRect(c)
   x,y,w,h = rect
   area = w * h
   epsilon = 0.08 * cv2.arcLength(c, True)
   approx = cv2.approxPolyDP(c, epsilon, True)
# กำหนด Area ที่จะทำการ Draw Contour
if area > 200000:
      cv2.drawContours(img, [approx], -1, (0, 0, 255), 5)
      cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 5)
      print('approx', approx)
      for x in range(0, len(approx)):
         cv2.circle(img, (approx[x][0][0], approx[x][0][1]), 30, (0,0,255), -1)

สามารถ проект за клониране ในเว็บไซต์นี้ https://github.com/dolabpublic/DOLAB_Blog3

ถ้า หาก ใคร สนใจ Обработка на изображения อีก สามารถ อ่าน การ เพิ่มเติม ได้ ที่ ลิ้งค์ ด้าง ล่าง นะ ครับ ครับ ครับ ครับ ครับ ครับ ครับ ครับ



Следвай ме.