Làm cách nào để có thể trừ một hình ảnh từ hình ảnh khác bằng cách sử dụng openCV?trừ một hình ảnh từ hình ảnh khác bằng cách sử dụng openCV
PS .: tôi coudn't sử dụng thực hiện python vì tôi sẽ phải làm điều đó trong C++
Làm cách nào để có thể trừ một hình ảnh từ hình ảnh khác bằng cách sử dụng openCV?trừ một hình ảnh từ hình ảnh khác bằng cách sử dụng openCV
PS .: tôi coudn't sử dụng thực hiện python vì tôi sẽ phải làm điều đó trong C++
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
#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.
sử dụng phương thức cv :: subtract().
Mat img1=some_img;
Mat img2=some_img;
Mat dest;
cv::subtract(img1,img2,dest);
Điều này thực hiện trừ theo phần tử (img1-img2). bạn có thể tìm thêm thông tin chi tiết về nó http://docs.opencv.org/modules/core/doc/operations_on_arrays.html
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
và [70, 80, 90]
cho im2
, sử dụng cả hai im1 - im2
và diff(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]
.
Tôi sẽ cố gắng, bạn của tôi. Cảm ơn – marionmaiden
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
Lần liên kết đầu tiên hết, liên kết thứ hai đã chết. – Twonky