2012-04-13 45 views
7

Tôi muốn làm một điều rất đơn giản: sao chép một khu vực bên trong một hình ảnh vào một khu vực mới trong một hình ảnh mới. Trong OpenCV 2.3 cheatsheet, họ đề nghị các giải pháp sau đây:Sao chép vùng của một hình ảnh sang vùng khác trong một hình ảnh khác

"Ví dụ 3. Sao chép ảnh ROI để một hình ảnh với chuyển đổi"

Rect r(1, 1, 10, 20); 
Mat dstroi = dst(Rect(0,10,r.width,r.height)); 
src(r).convertTo(dstroi, dstroi.type(), 1, 0); 

Mã của tôi là như sau:

Mat frameO, frameS; 

original >> frameO; 
stabilized >> frameS; 

Mat output(frameO.rows+40, frameO.cols*2+60, CV_32FC3); 
output.setTo(0);    
Rect r(0,0, frameO.cols, frameO.rows); 
Mat destROI = output(Rect(20,20, frameO.cols, frameO.rows)); 
frameO(r).copyTo(destROI); 

Tôi chỉ muốn sao chép hình ảnh frameO ở đầu ra tại vị trí Rect(20,20, frameO.cols, frameO.rows).
Bất cứ ai cũng có thể cho tôi biết lý do tại sao điều này không hoạt động?

+0

Đoạn mã bạn cung cấp chưa hoàn tất. Bạn có thể xin vui lòng gửi toàn bộ mã, bao gồm cả các hoạt động mà bạn thực sự thực hiện các bản sao. – ypnos

+0

bản sao có thể có của [Cách đặt ROI trong OpenCV?] (Http://stackoverflow.com/questions/8206466/how-to-set-roi-in-opencv) – karlphillip

+0

và cũng có thể trùng lặp với luồng lưu trữ http: // stackoverflow .com/question/6566295/opencv-c-get-region-of-interest-roi-using-cvmat – karlphillip

Trả lời

13

Trên thực tế các lệnh này không có tác dụng trong OpenCV 2.3 nhưng bây giờ sau hoạt động tốt với 2.4 phát hành:

Mat frame1 = imread(nameReading1); 

Mat output(frame1.rows*2, frame1.cols*2, frame1.type()); 
output.setTo(0); 

frame1.copyTo(output(Rect(0, 0, frame1.cols, frame1.rows))); 

này sẽ sao chép frame1 ở đầu ra càng lâu càng kiểu đồng ý vì vậy hãy cẩn thận khi bạn tạo ra . frame1 sẽ được sao chép trong ROI theo sản lượng được xác định bởi Rect(0, 0, frame1.cols, frame1.rows).

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