Bạn có một số quan niệm sai lầm về quá trình này.
Phương thức cv :: estimRigidTransform lấy làm hai bộ điểm tương ứng. Và sau đó giải quyết các phương trình để tìm ma trận biến đổi. Đầu ra của phép biến đổi khớp với điểm src thành điểm dst (chính xác hoặc chặt chẽ, nếu không thể khớp chính xác - ví dụ như tọa độ nổi).
Nếu bạn áp dụng ước lượngRigidTransform trên hai hình ảnh, trước tiên OpenCV tìm các cặp điểm phù hợp sử dụng một số phương pháp nội bộ (xem opencv docs).
cv :: warpAffine sau đó chuyển đổi hình ảnh src thành dst theo ma trận chuyển đổi đã cho. Nhưng bất kỳ (hầu như bất kỳ) chuyển đổi là hoạt động mất mát. Thuật toán phải ước tính một số dữ liệu, vì chúng không có sẵn. Quá trình này được gọi là nội suy, sử dụng thông tin đã biết mà bạn tính giá trị không xác định. Bạn có thể tìm thấy một số thông tin về chia tỷ lệ hình ảnh trên wiki. Các quy tắc tương tự áp dụng cho các phép biến đổi khác - xoay vòng, nghiêng, phối cảnh ... Rõ ràng điều này không áp dụng cho việc dịch.
Với hình ảnh thử nghiệm của bạn, tôi đoán rằng OpenCV sẽ chụp đèn như tham chiếu. Từ sự khác biệt rõ ràng là chụp đèn được chuyển đổi tốt nhất. Mặc định OpenCV sử dụng nội suy tuyến tính để làm cong vênh vì nó là phương pháp nhanh nhất. Nhưng bạn có thể đặt nhiều phương thức nâng cao hơn để có kết quả tốt hơn - hãy tham khảo lại opencv docs.
Kết luận: Kết quả bạn nhận được khá tốt, nếu bạn lưu ý, đó là kết quả của quá trình tự động. Nếu bạn muốn có kết quả tốt hơn, bạn sẽ phải tìm một phương pháp khác để chọn các điểm tương ứng. Hoặc sử dụng phương pháp nội suy tốt hơn. Dù bằng cách nào, sau khi biến đổi, sự khác biệt sẽ không là 0. Nó hầu như không thể đạt được điều đó, bởi vì bitmap là lưới riêng biệt của các điểm ảnh, do đó sẽ luôn có một số khoảng trống cần được ước tính.
Trước hết, bạn muốn đạt được chính xác những gì? Tất nhiên, khi thực hiện một số biến đổi chung, abs-diff sẽ khác không. Thậm chí thay đổi xoay vòng 1 độ cũng sẽ gây ra những thay đổi lớn do nội suy pixel. – jnovacho
Xin chào, jnovacho, tôi muốn chỉnh sửa hình ảnh bằng cách sử dụng opencv – Mudasar
Tôi vẫn không thấy sự cố. Mã của bạn có vẻ ổn với tôi. Bạn có thể cung cấp một số ảnh chụp màn hình - hình ảnh nguồn và đích cũng như hình ảnh đầu ra không. – jnovacho