ภาพรวม
โดยใช้โปรโตคอลพื้นที่สี (color space) คุณสามารถแสดงสีในภาพได้ มีพื้นที่สีหลายแบบที่พร้อมใช้งานใน OpenCV เช่น:
BGR - RGB เป็นพื้นที่สีที่ใช้กันอย่างแพร่หลาย โดยแต่ละพิกเซลประกอบด้วยค่าความเข้มของสีสามสี: แดง น้ำเงิน และเขียว เป็นพื้นที่สีเริ่มต้นใน OpenCV แต่เก็บในรูปแบบ BGR
HSV - ในพื้นที่สี HSV สีต่างๆ ถูกสร้างขึ้นโดยการเปลี่ยนแปลง Hue (สี) Saturation (ความอิ่ม) และ Brightness (ความสว่าง)
CMYK - นี่คือพื้นที่สีแบบลบ (subtractive) สีต่างๆ ถูกสร้างโดยการลบค่า Cyan, Magenta และ Yellow เริ่มจากสีขาว
Y'UV - Y'UV กำหนดพื้นที่สีในรูปของ Luma (Y') หนึ่งตัวและ Chrominance (UV) สองตัว โมเดลสี Y'UV ถูกใช้ในมาตรฐานวิดีโอสีผสมต่างๆ
คุณสามารถแปลงการแสดงภาพจากพื้นที่สีหนึ่งไปยังอีกพื้นที่หนึ่งได้โดยใช้เมธอด cvtColor() ของคลาส org.opencv.imgproc.Imgproc เมธอดนี้รับภาพต้นทาง ภาพปลายทาง และรหัสที่แทนสีของภาพปลายทาง
เพื่อเปลี่ยนพื้นที่สีจาก BGR เป็น HSV คุณต้องส่ง COLOR_BGR2HSV เป็นค่ารหัสสี เช่นเดียวกัน เพื่อเปลี่ยนจาก BGR เป็น YUV ต้องส่ง COLOR_BGR2YUV
ตัวอย่างโค้ด
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class ChangingColorSpaces {
public static void main(String args[]) throws Exception {
// โหลดไลบรารีหลักของ OpenCV
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// อ่านภาพ
Mat src = Imgcodecs.imread("D:\\images\\elephant.jpg");
// สร้างเมทริกซ์ปลายทางว่าง
Mat dst = new Mat();
// แปลงจาก BGR เป็น Gray
Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2GRAY);
HighGui.imshow("BGR to Gray", dst);
dst = new Mat();
// แปลงจาก BGR เป็น HSV
Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2HSV);
HighGui.imshow("BGR to HSV", dst);
dst = new Mat();
// แปลงจาก BGR เป็น YUV
Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2YUV);
HighGui.imshow("BGR to YUV", dst);
HighGui.waitKey();
}
}
ภาพเข้า

ผลลัพธ์
เมื่อรันโปรแกรม จะแสดงหน้าต่างดังต่อไปนี้:
BGR to Gray

BGR to HSV

BGR to YUV
