Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จะแบ่งภาพออกเป็นช่องต่าง ๆ ใน OpenCV โดยใช้ C ++ ได้อย่างไร


ภาพ RGB มีสามช่องสัญญาณ ได้แก่ สีแดง สีเขียว และสีน้ำเงิน พื้นที่สีที่ช่องสีแดง สีเขียว และสีน้ำเงินแทนภาพเรียกว่าปริภูมิสี RGB ใน OpenCV จะใช้ลำดับ BGR แทน RGB ซึ่งหมายความว่าช่องแรกเป็นสีน้ำเงิน ช่องที่สองเป็นสีเขียว และช่องที่สามเป็นสีแดง ในการแบ่งภาพ RGB ออกเป็นแชนเนลต่างๆ เราต้องกำหนดเมทริกซ์ 3 แชนเนล เราใช้ 'Mat different_Channels[3]' เพื่อกำหนดเมทริกซ์สามช่องสัญญาณ

ต่อไป เราแบ่งภาพที่โหลดโดยใช้ฟังก์ชัน 'split()' ของ OpenCV รูปแบบของฟังก์ชันนี้คือ 'split(Source Matrix, Destination Matrix)' ฟังก์ชันนี้แบ่งรูปภาพของเมทริกซ์ต้นทางเป็นแชนเนลของรูปภาพและบันทึกไว้ในเมทริกซ์ปลายทาง บรรทัดนี้กำลังทำงาน – 'split(myImage, different_Channels);'

ฟังก์ชัน split ได้โหลดช่องสัญญาณสีน้ำเงิน สีเขียว และสีแดงลงในเมทริกซ์ 'different_channels' แล้ว โดยใช้บรรทัดต่อไปนี้ เราโหลดภาพที่เก็บไว้ในช่องต่างๆ ลงในเมทริกซ์ใหม่

Mat b =different_Channels[0];//กำลังโหลดช่องสีน้ำเงิน//Mat g =different_Channels[1];//กำลังโหลดช่องสีเขียว//Mat r =different_Channels[2];//กำลังโหลดช่องสีแดง// 

และสุดท้ายเราแสดงแต่ละช่องต่างกันโดยใช้บรรทัดต่อไปนี้ -

imshow("ช่องสีน้ำเงิน",b);//แสดงช่องสีน้ำเงิน//imshow("ช่องสีเขียว",g);//แสดงช่องสีเขียว//imshow("ช่องสีแดง",r);//กำลังแสดง ช่องแดง//

นี่คือวิธีที่เราสามารถแบ่งรูปภาพออกเป็นช่องต่างๆ ได้

โปรแกรมต่อไปนี้แบ่งภาพ RGB เป็นช่องสีน้ำเงิน เขียว และแดง

ตัวอย่าง

#include#include
#include
ใช้เนมสเปซ cv; ใช้เนมสเปซ std;int main (int argc, const char** argv) { Mat myImage;// ประกาศเมทริกซ์เพื่อโหลดรูปภาพ // Mat different_Channels[3];// ประกาศเมทริกซ์ที่มีสามช่องสัญญาณ // myImage=imread("RGB.png");// กำลังโหลดรูปภาพในเมทริกซ์ myImage // split (myImage, different_Channels);// แยกภาพออกเป็น 3 ช่องสัญญาณ // Mat b =different_Channels[0];// กำลังโหลดช่องสีน้ำเงิน// Mat g =different_Channels[1];// กำลังโหลดช่องสีเขียว// Mat r =different_Channels[2];//กำลังโหลดช่องสีแดง// imshow("ช่องสีน้ำเงิน",b);//แสดงช่องสีน้ำเงิน// imshow("ช่องสีเขียว",g);//แสดงช่องสีเขียว// imshow( "ช่องสีแดง",r);//แสดงช่องสีแดง// imshow("Actual_Image", myImage);//แสดงภาพจริง// waitKey(0);//รอการกดคีย์ destroyAllWindows();//ปิดทั้งหมด windows// return 0;}

ผลลัพธ์

จะแบ่งภาพออกเป็นช่องต่าง ๆ ใน OpenCV โดยใช้ C ++ ได้อย่างไร