2012-05-07 28 views
40

Tôi cần sao chép hình ảnh cv::Mat (nguồn) vào ROI của hình ảnh khác (Đích) cv::Mat.Sao chép cv :: Mat bên trong ROI của một số khác

Tôi tìm thấy this reference, nhưng có vẻ như nó không hoạt động đối với trường hợp của tôi. Bạn có bất kỳ con trỏ làm thế nào tôi có thể làm điều này bằng cách sử dụng giao diện OpenCV C++?

Trả lời

64

OpenCV 2.4:

src.copyTo(dst(Rect(left, top, src.cols, src.rows))); 

OpenCV 2.x:

Mat dst_roi = dst(Rect(left, top, src.cols, src.rows)); 
src.copyTo(dst_roi); 
+0

cảm ơn! Tôi đã làm nó như thế này và hoạt động tuyệt vời: bboxImage.copyTo (destImage.colRange (startCol, startCol + bboxImage.cols) .rowRange (startRow, startRow + bboxImage.rows)); – theosem

+1

Sản lượng 'không có hàm phù hợp cho cuộc gọi đến 'cv :: Mat :: copyTo (cv :: Mat)' viewtest2.cpp: 172: 61: lưu ý: ứng cử viên là: /usr/include/opencv2/core/core. hpp: 1651: 10: note: void cv :: Mat :: copyTo (cv :: OutputArray) const' trong OpenCV 2.4.6. Tuy nhiên, giải pháp thứ hai không hoạt động, nhưng nó kết quả thành một hình ảnh chỉ với src. – pbond

+5

sự khác nhau giữa phiên bản trước của opencv là gì? tại sao mã khác? – nkint

6

đã làm việc cho tôi theo cách này:

Mat imgPanel(100, 250, CV_8UC1, Scalar(0)); 
Mat imgPanelRoi(imgPanel, Rect(0, 0, imgSrc.cols, imgSrc.rows)); 
imgSrc.copyTo(imgPanelRoi); 

imshow("imgPanel", imgPanel); 
waitKey(); 

Tôi đang sử dụng OpenCV 2.4.9 Dựa trên Câu trả lời của Andrey.

5

Trong thêm hoặc chỉnh sửa câu trả lời ở trên, nếu bạn muốn sao chép một vùng nhỏ hơn mở Mat-Mat khác, bạn nên làm:

src(Rect(left,top,width, height)).copyTo(dst); 
Các vấn đề liên quan