2015-12-12 311 views
3

我有一個圖像,並且我知道該圖像的四個座標,現在我只想在由這四個點形成的輪廓上放置另一個小圖像。這個輪廓幾乎是一個正方形。 有沒有辦法用圖像填充這個輪廓點?使用OpenCV將圖像變形爲另一個圖像的四邊形區域

我試圖創建一個矩形,但我不能使用多個點創建一個矩形。 我被卡住了。找不到任何解決方案。

回答

4

我假設你想「經」的圖像(我們稱之爲img)到放置在另一個圖像四(我們稱之爲canvas) - 即這個相反:

首先,你需要找到矩形圖像(img)和目標四之間的轉換(矩陣)T(姑且稱之爲warpedImg):

cv::Mat T = getPerspectiveTransform(imgCorners,  // std::vector<cv::Point2f> that contains img's vertices -- i.e. (0, 0) (0,img.rows) (img.cols, img.rows) (img.cols, 0) 
            warpedCorners); // std::vector<cv::Point2f> that contains warpedImg's vertices 

然後,您可以使用T產生warpedImgimg

cv::Mat warpedImg; 
cv::warpPerspective(img, warpedImg, T, canvas.size()); 

最後, 「粘貼」 warpedImgcanvas,可以先 「面具」 四區canvas

cv::fillConvexPoly(canvas, warpedCorners, cv::Scalar::all(0), CV_AA); 

然後應用「或」操作:

cv::bitwise_or(warpedImg, canvas, canvas); 

就是這樣!

+2

你先生很神奇。我完全理解這個概念,它的工作就像一個魅力。謝謝。 – Sagar

相關問題