首頁 > 後端開發 > C++ > 主體

為什麼我的 cv::warpPerspective 傾斜校正實作會產生不正確的結果,如何修復它?

DDD
發布: 2024-11-23 03:32:11
原創
582 人瀏覽過

Why Does My cv::warpPerspective Deskewing Implementation Produce Incorrect Results, and How Can I Fix It?

如何正確執行cv::warpPerspective 來校正一組點

問題:

嘗試使用cv ::warpPerspective ::warpPerspective在一組點上實現傾斜校正效果取得了不令人滿意的結果。下圖中的綠色矩形說明了所需的歪斜校正:

[帶有綠色矩形概述感興趣區域的文檔圖像]

原因:

不正確的結果可能歸因於幾個方面因子:

  1. 點順序:輸入和輸出向量中的點必須具有相同的順序(例如,左上、左下、右下、上-right).
  2. 輸出影像大小:為了防止產生的影像包含多餘的背景,應設定其寬度和高度以匹配去歪斜區域周圍的邊界矩形。

解決方案:

為了解決這些問題,下面的代碼已修改:

void main()
{
    cv::Mat src = cv::imread("r8fmh.jpg", 1);

    // Points representing the corners of the paper in the picture:
    vector<Point> not_a_rect_shape;
    not_a_rect_shape.push_back(Point(408, 69));
    not_a_rect_shape.push_back(Point(72, 2186));
    not_a_rect_shape.push_back(Point(1584, 2426));
    not_a_rect_shape.push_back(Point(1912, 291));

    // Assemble a rotated rectangle from the points
    RotatedRect box = minAreaRect(cv::Mat(not_a_rect_shape));

    // Extract the corner points of the rotated rectangle
    Point2f pts[4];
    box.points(pts);

    // Define the vertices for the warp transformation
    Point2f src_vertices[3];
    src_vertices[0] = pts[0];
    src_vertices[1] = pts[1];
    src_vertices[2] = pts[3];

    Point2f dst_vertices[3];
    dst_vertices[0] = Point(0, 0);
    dst_vertices[1] = Point(box.boundingRect().width - 1, 0);
    dst_vertices[2] = Point(0, box.boundingRect().height - 1);

    // Use the affine transform as it's faster for the given use case
    Mat warpAffineMatrix = getAffineTransform(src_vertices, dst_vertices);

    cv::Mat rotated;
    cv::Size size(box.boundingRect().width, box.boundingRect().height);
    warpAffine(src, rotated, warpAffineMatrix, size, INTER_LINEAR, BORDER_CONSTANT);

    imwrite("rotated.jpg", rotated);
}
登入後複製

改進:

要進一步提高效率,請考慮使用cv::getAffineTransform() 和 cv::warpAffine() 取代 cv:: getPerspectiveTransform() 和 cv::warpPerspective()。這些函數是專門為仿射變換而設計的,速度明顯更快。

以上是為什麼我的 cv::warpPerspective 傾斜校正實作會產生不正確的結果,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板