OpenCV có hàm calculateRigidTransform() và warpAffine() xử lý loại sự cố này thực sự tốt.
của nó khá nhiều càng đơn giản như thế này:
Mat M = estimateRigidTransform(frame1,frame2,0)
warpAffine(frame2,output,M,Size(640,480),INTER_NEAREST|WARP_INVERSE_MAP)
Bây giờ output
chứa nội dung của frame2
đó là tốt nhất phù hợp để phù hợp với frame1
. Đối với những thay đổi lớn, M sẽ là một ma trận zero hoặc nó có thể không phải là một ma trận ở tất cả, tùy thuộc vào phiên bản OpenCV, vì vậy bạn sẽ phải lọc và không áp dụng chúng. Tôi không chắc nó lớn thế nào; có lẽ một nửa chiều rộng khung hình, có thể nhiều hơn nữa.
Tham số thứ ba để ước lượngRigidTransform là một boolean cho biết liệu có áp dụng ma trận affine tùy ý hay hạn chế nó để dịch/xoay/chia tỷ lệ hay không. Với mục đích ổn định hình ảnh từ máy ảnh, bạn có thể chỉ muốn hình ảnh sau. Trong thực tế, để ổn định hình ảnh máy ảnh, bạn cũng có thể muốn loại bỏ bất kỳ tỷ lệ nào từ ma trận được trả về bằng cách chuẩn hóa nó để chỉ xoay và dịch.
Ngoài ra, đối với máy ảnh chuyển động, bạn có thể muốn lấy mẫu M theo thời gian và tính giá trị trung bình.
Dưới đây là liên kết để biết thêm về estimateRigidTransform(), và warpAffine()
Great câu trả lời! Một danh sách tốt đẹp. Tôi không biết về sự tương quan pha. Cảm ơn ! –