【學習筆記-opencv透視變換】點的透視變換和圖像透視變換

前言:在做項目的時候,用到了關於 “點” 的透視變換,查閱很多blog,發現大多數都是關於圖的透視變換,所以特意記錄一下,順便把圖片的透視變換代碼貼到這裏,方便大家查閱。

一、圖的透視變換----得到透視後的圖
我們在做圖像處理的時候經常需要做透視變換得到鳥瞰圖,在鳥瞰圖上做處理,甚至根據需要還需要將透視後 處理過的圖像再次的透視變換回去。這裏簡單粗暴的記錄一下自己曾經學習的心路。重點:簡單粗暴,快速上手,廢話不多說,開始我的表演。

//  定義四個原始點
cv::Point2f sourcePoints[4], objectPoints[4];
sourcePoints[0].x = 567 - 10.; sourcePoints[0].y = 461.; //left_top
sourcePoints[1].x = 692.; sourcePoints[1].y = 461.;  //right_top
sourcePoints[2].x = 369 - 10.; sourcePoints[2].y = 638;   //left_bottom
sourcePoints[3].x = 1058; sourcePoints[3].y = 638.;  //right_bottom/
// 定義四個目標點 或者說是你透視變換後圖像的大小
objectPoints[0].x = 50.; objectPoints[0].y = 15.;
objectPoints[1].x = 276.; objectPoints[1].y = 15.;
objectPoints[2].x = 50.; objectPoints[2].y = 610.;
objectPoints[3].x = 276.; objectPoints[3].y = 610.
// 透視變換矩陣
transformMatrix = cv::getPerspectiveTransform(objectPoints, sourcePoints);  //perspective matrix
cv::warpPerspective(inputImage, inputImage, Matrix, Size(inputImage.rows/2, inputImage.cols/2), INTER_LINEAR);  // 透視變換

效果圖如下:
原圖:在這裏插入圖片描述鳥瞰圖:
居中

二、點的透視變換----得到透視後點的座標
點的透視變換和圖片的透視變換原理是一樣的,具體代碼如下:

//原始點
 sourcePoints[0].x = 567 - 10.; sourcePoints[0].y = 461.; //left_top
 sourcePoints[1].x = 692.; sourcePoints[1].y = 461.;  //right_top
 sourcePoints[2].x = 369 - 10.; sourcePoints[2].y = 638;   //left_bottom
 sourcePoints[3].x = 1058; sourcePoints[3].y = 638.;  //right_bottom
 // 目標點
 objectPoints[0].x = 50.; objectPoints[0].y = 15.;
 objectPoints[1].x = 276.; objectPoints[1].y = 15.;
 objectPoints[2].x = 50.; objectPoints[2].y = 610.;
 objectPoints[3].x = 276.; objectPoints[3].y = 610.;

std::vector<cv::Point2f> warpedLeftPoint;  // 點爲  cv::Point2f類型  我這裏是一堆點
cv::perspectiveTransform(points, warpedLeftPoint, transformMatrix);  //點的透視變換,透視變換矩陣和圖像透視變換矩陣一樣

三、總 結
點的透視變換和圖片的透視變換本質上是一樣的,具體步驟都是一樣的:

  1. 定義4個原始點和4個目標點。
  2. 利用點的對應關係,求透視變換矩陣。
  3. 根據透視變換矩陣得到透視變換後的點或者圖像。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章