Changing Colorspaces

จาก Morange Wiki

วัตถุประสงค์

  • คุณจะได้เรียนรู้วิธีการแปลงภาพจากสีหนึ่งไปพื้นที่อื่นเช่น BGR ↔สีเทา, BGR ↔ HSV ฯลฯ
  • เราจะสร้างโปรแกรมที่สารสกัดจากวัตถุสีในวิดีโอหนึ่ง
  • คุณจะได้เรียนรู้การทำงานต่อไปนี้ cv2.cvtColor () cv2.inRange () เป็นต้น

การเปลี่ยนสีพื้นที่ มีมากกว่า 150 วิธีการแปลงสีที่มีอยู่ในพื้นที่ที่มี OpenCV แต่เราจะมีลักษณะเป็นเพียงสองข้อซึ่งมีการใช้กันอย่างแพร่หลายมากที่สุด BGR ↔สีเทาและ BGR ↔ HSV
สำหรับการแปลงสีเราจะใช้ฟังก์ชั่น cv2.cvtColor (input_image ธง) ซึ่งกำหนดประเภทของการแปลง
สำหรับการแปลง BGR →สีเทาที่เราใช้ cv2.COLOR_BGR2GRAY ในทำนองเดียวกันสำหรับ BGR → HSV เราใช้ cv2.COLOR_BGR2HSV ที่จะได้รับ เพียงแค่เรียกใช้คำสั่งใน terminal python ของคุณ

 >>> import cv2
 >>> flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
 >>> print flags

ติดตามวัตถุ ตอนนี้เรารู้วิธีการแปลงภาพ BGR เพื่อ HSV เราสามารถใช้เพื่อดึงวัตถุสี ใน HSV เป็นตัวแทนของสีใน BGR สีพื้น ในโปรแกรมของเรา เราจะพยายามที่จะดึงวัตถุสีฟ้า ดังนั้นนี่คือวิธีการ

  • ใช้เฟรมของวิดีโอในแต่ละลัน
  • แปลงจาก BGR เพื่อ HSV สีพื้นที่
  • เราเกณฑ์ภาพ HSV สำหรับช่วงของสีฟ้า
  • ตอนนี้แยกวัตถุสีฟ้าคนเดียวที่เราสามารถทำสิ่งที่ภาพที่เราต้องการ
import cv2
 import numpy as np
 
 cap = cv2.VideoCapture(0)
 
 while(1):
 
     # Take each frame
     _, frame = cap.read()
 
     # Convert BGR to HSV
     hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
 
     # define range of blue color in HSV
     lower_blue = np.array([110,50,50])
     upper_blue = np.array([130,255,255])
 
     # Threshold the HSV image to get only blue colors
     mask = cv2.inRange(hsv, lower_blue, upper_blue)
 
     # Bitwise-AND mask and original image
     res = cv2.bitwise_and(frame,frame, mask= mask)
 
     cv2.imshow('frame',frame)
     cv2.imshow('mask',mask)
     cv2.imshow('res',res)
     k = cv2.waitKey(5) & 0xFF
     if k == 27:
         break
 
 cv2.destroyAllWindows()
มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย

วิธีการหาค่า HSV ติดตามหรือไม่

 >>> green = np.uint8([[[0,255,0 ]]])
 >>> hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
 >>> print hsv_green
 [[[ 60 255 255]]]

ตอนนี้คุณใช้ [H-10, 100,100] และ [H + 10, 255, 255] เป็นขอบเขตล่างและขอบเขตบนตามลำดับ นอกเหนือจากวิธีนี้คุณสามารถใช้เครื่องมือในการแก้ไขภาพใด ๆ เช่น GIMP หรือแปลงออนไลน์ใด ๆ ที่จะหาค่าเหล่านี้ แต่ไม่ลืมที่จะปรับช่วง HSV