2012-06-12 36 views
25

Có chức năng OpenCV để vẽ hình ảnh trên hình ảnh khác không? Tôi có một hình ảnh lớn là loại Mat. Và tôi có một hình ảnh nhỏ của Mat loại (5x7). Tôi muốn vẽ hình ảnh nhỏ này qua hình ảnh lớn tại coordinates được chỉ định.OpenCV vẽ hình ảnh lên hình ảnh khác

+11

Hãy chấp nhận một số câu trả lời hoặc cho biết lý do tại sao chúng không hoạt động. Cố gắng không để giữ cho nơi này mở câu hỏi nghĩa địa. –

Trả lời

39

Sử dụng Mat::rowRange()Mat::colRange() để chỉ định khu vực bạn muốn vẽ ở đích Mat. Mã số:

Mat src(5, 7, CV_8UC1, Scalar(1)); // 5x7 
Mat dst(10, 10, CV_8UC1, Scalar(0)); // 10x10 

src.copyTo(dst.rowRange(1, 6).colRange(3, 10)); 

Kết quả trong những điều sau đây:

trước copyTo():

dst: 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 

sau copyTo():

dst: 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 1 1 1 1 1 1 1) 
    (0 0 0 1 1 1 1 1 1 1) 
    (0 0 0 1 1 1 1 1 1 1) 
    (0 0 0 1 1 1 1 1 1 1) 
    (0 0 0 1 1 1 1 1 1 1) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
+2

'a.copyTo (big.colRange (51,55) .rowRange. (63,69))' for '5x7' –

+0

Cảm ơn bạn rất nhiều! – vitaly

+1

Perfect One liner !! – user2727765

35

Tạo một khu vực quan tâm trong hình ảnh lớn và sau đó sao chép hình ảnh nhỏ đến khu vực đó:

cv::Rect roi(cv::Point(originX, originY), cv::Size(width, height)); 
cv::Mat destinationROI = bigImage(roi); 
smallImage.copyTo(destinationROI); 

Nếu bạn chắc chắn hình ảnh nhỏ phù hợp với hình ảnh lớn sau đó bạn chỉ có thể làm:

cv::Rect roi(cv::Point(originX, originY), smallImage.size()); 
smallImage.copyTo(bigImage(roi)); 
+1

Rất tiếc, điều này dường như không hoạt động đối với tôi, tôi nhận được lỗi: 'lỗi: không có hàm nào phù hợp để gọi‘ cv :: Mat :: copyTo (cv :: Mat) ’. Và nó cung cấp các ứng cử viên nhận cv :: OutputArray thay vào đó, khi tôi nhìn vào http://opencv.willowgarage.com/documentation/cpp/basic_structures.html#cv-mat-copyto nó dường như có Mat là một đối số, nhưng tôi nhận được lỗi này? – pbond

2

Dưới đây là giải pháp trong phiên bản java của OpenCV

Rect roi= new Rect(originX,originY,smalImage.width(),smallImge.height()); 
smallImage.copyTo(new Mat(input,roi)); 
Các vấn đề liên quan