2010-03-23 58 views

Trả lời

5

Sử dụng LoadImage để tải hình ảnh của bạn vào bộ nhớ, sau đó sử dụng phương pháp Sub.

Liên kết này có chứa một số mã ví dụ, nếu điều đó sẽ giúp: http://permalink.gmane.org/gmane.comp.lib.opencv/36167

+0

Tôi sẽ cố gắng, bạn của tôi. Cảm ơn – marionmaiden

+0

Câu trả lời này đã được sinh ra lỗi thời :) [DatChu answer] (http://stackoverflow.com/a/2549246/2436175) là chỉ có giá trị ngày nay. – Antonio

+1

Lần liên kết đầu tiên hết, liên kết thứ hai đã chết. – Twonky

13
#include <cv.h> 
#include <highgui.h> 

using namespace cv; 

Mat im = imread("cameraman.tif"); 
Mat im2 = imread("lena.tif"); 

Mat diff_im = im - im2; 

Thay đổi tên hình ảnh. Ngoài ra hãy chắc chắn rằng họ có cùng kích thước.

0

Thay vì sử dụng diff hoặc chỉ trừ đồng bằng im1-im2 Tôi sẽ đề nghị thay vì phương pháp OpenCV cv::absdiff

using namespace cv; 
Mat im1 = imread("image1.jpg"); 
Mat im2 = imread("image2.jpg"); 
Mat diff; 
absdiff(im1, im2, diff); 

Kể từ khi những hình ảnh thường được lưu trữ sử dụng định dạng unsigned, các phương pháp trừ của @Dat và @ ssh99 sẽ tiêu diệt tất cả những khác biệt tiêu cực. Ví dụ, nếu một số điểm ảnh của một hình ảnh BMP có giá trị [20, 50, 30] cho im1[70, 80, 90] cho im2, sử dụng cả hai im1 - im2diff(im1, im2, diff) sẽ tạo ra giá trị [0,0,0], vì 20-70 = -50, 50-80 = -30, 30-90 = -60 và tất cả các kết quả tiêu cực sẽ được chuyển đổi sang giá trị unsigned của 0, mà , trong hầu hết các trường hợp, không phải là những gì bạn muốn. Phương pháp absdiff thay vào đó sẽ tính giá trị tuyệt đối của tất cả các phép trừ, do đó sản xuất hợp lý hơn [50,30,60].

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