2012-10-10 32 views
5

Tôi có hình dạng của một khuôn mặt cùng với việc tái thiết của khuôn mặt đó và tôi muốn mô hình hình ảnh tương ứng của hình dạng ban đầu.OpenCV - thực hiện phù hợp cho mỏng - Plate Spline Warping

Về cơ bản, tôi muốn di chuyển các điểm từ hình gốc sang vị trí được chỉ định bằng cách tái tạo khuôn mặt. Tôi đã cố gắng làm điều này bằng cách sử dụng cong vênh lá mỏng, thực hiện nó: http://ipwithopencv.blogspot.ro/2010/01/thin-plate-spline-example.html.

Tuy nhiên, nó không hoạt động như tôi muốn. Tôi muốn có các góc của hình ảnh cố định và chỉ để di chuyển các điểm tương ứng xác định khuôn mặt. Tôi có thể minh họa điều này với 2 hình ảnh. Trong bức ảnh đầu tiên tôi có hình dạng của khuôn mặt nguyên thủy với hình dạng được tái tạo. enter image description here

Ở đây tôi có hình ảnh mà tôi muốn sửa đổi và hình ảnh kết quả bằng cách sử dụng mã từ liên kết được đề cập ở trên. Các điểm màu xanh lá cây đánh dấu các điểm mặt ban đầu và các điểm màu xanh đánh dấu vị trí mới của họ và nơi tôi muốn đặt lại vị trí và kéo căng khuôn mặt của tôi.

enter image description here

Tất cả tôi muốn chỉ là để di chuyển các điểm màu xanh lá cây đến điểm màu xanh để nó trông biến dạng. Bạn có biết phương pháp nào để làm điều này mà bạn đã thử nghiệm không?

Trả lời

1

Bắt góc cố định khá dễ dàng. Chỉ cần thêm bốn thư từ bổ sung cho bốn góc hình ảnh. Về ví dụ của bạn:

iP.push_back(cv::Point(0, 0)); 
iiP.push_back(cv::Point(0, 0)); 
iP.push_back(cv::Point(0, height-1)); 
iiP.push_back(cv::Point(0, height-1)); 
iP.push_back(cv::Point(width-1, 0)); 
iiP.push_back(cv::Point(width-1, 0)); 
iP.push_back(cv::Point(width-1, height-1)); 
iiP.push_back(cv::Point(width-1, height-1)); 

đâu, tất nhiên, rộng là chiều rộng hình ảnh và chiều cao là chiều cao hình ảnh

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