Computer >> Máy Tính >  >> Lập trình >> C ++

Làm cách nào để chia hình ảnh thành các kênh khác nhau trong OpenCV bằng C ++?

Có ba kênh trong hình ảnh RGB - đỏ, lục và lam. Không gian màu mà các kênh màu đỏ, xanh lục và lam đại diện cho hình ảnh được gọi là không gian màu RGB. Trong OpenCV, chuỗi BGR được sử dụng thay vì RGB. Điều này có nghĩa là kênh đầu tiên có màu xanh lam, kênh thứ hai có màu xanh lá cây và kênh thứ ba có màu đỏ. Để chia một hình ảnh RGB thành các kênh khác nhau, chúng ta cần xác định một ma trận gồm 3 kênh. Chúng tôi sử dụng 'Mat Different_Channels [3]' để xác định ma trận ba kênh.

Tiếp theo, chúng tôi chia hình ảnh đã tải bằng hàm 'split ()' của OpenCV. Định dạng của chức năng này là 'phân tách (Ma trận Nguồn, Ma trận Đích)'. Chức năng này chia hình ảnh của ma trận nguồn thành các kênh hình ảnh và lưu chúng trong ma trận đích. Dòng này đang hoạt động - 'split (myImage, other_Channels);'

Hàm phân tách đã tải kênh màu xanh lam, xanh lục và đỏ vào ma trận 'kênh_ kênh khác_sẽ'. Sử dụng các dòng sau, chúng tôi tải các hình ảnh được lưu trữ trong các kênh khác nhau vào ma trận mới.

 Mat b =different_Channels [0]; // tải các kênh màu xanh lam // Mat g =another_Channels [1]; // tải các kênh màu xanh lá cây // Mat r =other_Channels [2]; // tải các kênh màu đỏ //  

Và cuối cùng, chúng tôi đã hiển thị từng kênh khác nhau bằng cách sử dụng các dòng sau -

 imshow ("Blue Channel", b); // hiển thị Blue channel // imshow ("Green Channel", g); // hiển thị Green channel // imshow ("Red Channel", r); // đang hiển thị Kênh màu đỏ // 

Đây là cách chúng tôi có thể chia hình ảnh thành các kênh của nó.

Chương trình sau đây chia hình ảnh RGB thành kênh xanh lam, xanh lục và đỏ.

Ví dụ

 #include  #include 
 #include 
 using namespace cv; using namespace std; int main (int argc, const char ** argv) {Mat myImage; // khai báo ma trận để tải hình ảnh // Mat another_Channels [3]; // khai báo ma trận có ba kênh // myImage =imread ("RGB.png"); // tải hình ảnh trong ma trận myImage // split (myImage, different_Channels); // tách hình ảnh thành 3 kênh khác nhau // Mat b =another_Channels [0]; // tải các kênh màu xanh lam // Mat g =another_Channels [1]; // tải các kênh màu xanh lá cây // Mat r =other_Channels [2]; // tải các kênh màu đỏ // imshow ("Blue Channel", b); // hiển thị Blue channel // imshow ("Green Channel", g); // hiển thị Green channel // imshow ( "Red Channel", r); // hiển thị Red channel // imshow ("Actual_Image", myImage); // hiển thị hình ảnh thực tế // waitKey (0); // đợi hành trình phím hủy diệtAllWindows (); // đóng tất cả windows // trả về 0;} 

Đầu ra

Làm cách nào để chia hình ảnh thành các kênh khác nhau trong OpenCV bằng C ++?