2012-01-28 39 views
7

Tôi đang làm việc với QT và OpenCV, tôi có hình vuông này mà tôi cần trích xuất nhưng tôi cần sử dụng chuyển đổi từ RGB sang một kênh (RED cơ bản). Bất kỳ lời khuyên nào sẽ được chào đón nhiều hơn, xin vui lòng tư vấn có chức năng sử dụng. Cảm ơn trước.trích xuất một hình ảnh kênh từ hình ảnh RGB với opencV

+0

Bạn có muốn có một cái nhìn tại cvtColor function()? http://opencv.willowgarage.com/documentation/cpp/miscellaneous_image_transformations.html#cvtColor –

Trả lời

2

Theo như tôi biết một cuộc gọi đến,

cvtColor(src, bwsrc, CV_RGB2GRAY); 

có thể làm điều đó, nơi src là hình ảnh nguồn đa kênh và tham số thứ ba đại diện cho số kênh trong đích. Vì vậy, bạn có thể làm điều đó trong OpenCV và hiển thị hình ảnh trên giao diện Qt của bạn.

Mặt khác, bạn có thể chia các kênh thành các mảng kênh đơn riêng biệt bằng phương thức split() thích hợp.

http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html#split

10

Tôi nghĩ cvSplit là những gì bạn đang tìm kiếm (docs). Ví dụ: bạn có thể sử dụng nó để chia RGB thành R, G và B:

/* assuming src is your source image */ 
CvSize s = cvSize(src->width, src->height); 
int d = src->depth; 
IplImage* R = cvCreateImage(s, d, 1); 
IplImage* G = cvCreateImage(s, d, 1); 
IplImage* B = cvCreateImage(s, d, 1); 
cvSplit(src, R, G, B, null); 

Lưu ý bạn sẽ cần phải cẩn thận về thứ tự; hãy chắc chắn rằng hình ảnh gốc thực sự được đặt hàng là R, G, B (có cơ hội tốt là B, G, R).

+0

đây có thể là điều mà người hỏi đã tìm kiếm. – kiltek

7

Vì thẻ này được gắn thẻ qt Tôi sẽ trả lời C++.

// Create Windows 
    namedWindow("Red",1); 
    namedWindow("Green",1); 
    namedWindow("Blue",1); 

    // Create Matrices (make sure there is an image in input!) 
    Mat input; 
    Mat channel[3]; 

    // The actual splitting. 
    split(input, channel); 

    // Display 
    imshow("Blue", channel[0]); 
    imshow("Green", channel[1]); 
    imshow("Red", channel[2]); 

Thử nghiệm trên OpenCV 2.4.5

Các vấn đề liên quan