3
我有一個圖像,並且我知道該圖像的四個座標,現在我只想在由這四個點形成的輪廓上放置另一個小圖像。這個輪廓幾乎是一個正方形。 有沒有辦法用圖像填充這個輪廓點?使用OpenCV將圖像變形爲另一個圖像的四邊形區域
我試圖創建一個矩形,但我不能使用多個點創建一個矩形。 我被卡住了。找不到任何解決方案。
我有一個圖像,並且我知道該圖像的四個座標,現在我只想在由這四個點形成的輪廓上放置另一個小圖像。這個輪廓幾乎是一個正方形。 有沒有辦法用圖像填充這個輪廓點?使用OpenCV將圖像變形爲另一個圖像的四邊形區域
我試圖創建一個矩形,但我不能使用多個點創建一個矩形。 我被卡住了。找不到任何解決方案。
我假設你想「經」的圖像(我們稱之爲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
產生warpedImg
從img
:
cv::Mat warpedImg;
cv::warpPerspective(img, warpedImg, T, canvas.size());
最後, 「粘貼」 warpedImg
到canvas
,可以先 「面具」 四區canvas
:
cv::fillConvexPoly(canvas, warpedCorners, cv::Scalar::all(0), CV_AA);
然後應用「或」操作:
cv::bitwise_or(warpedImg, canvas, canvas);
就是這樣!
你先生很神奇。我完全理解這個概念,它的工作就像一個魅力。謝謝。 – Sagar