使用SURF在場景中查找參考圖像時,我想裁剪找到的場景中的物體,並使用warpPerspective將其「回正」單應矩陣。
含義,讓我們說我有這個SURF結果:
現在,我想裁剪找到的對象場景:
和 「拉直」 只有使用反轉的單應性矩陣,使用warpPerspective裁剪圖像。我所瞄準的結果是,我將得到一幅圖像,大致只包含對象,以及原始場景中的一些扭曲的殘留物(因爲裁剪不是單獨的100%對象)。
裁剪找到的對象,並找到單應性矩陣並反轉它很簡單。問題是,我似乎無法理解warp的結果。看起來像所產生的圖像僅包含裁剪圖像的一小部分,並且尺寸非常大。
在研究warpPerspective期間,我發現由於過程的性質而產生的圖像非常大,但我似乎無法圍繞如何正確地做到這一點。好像我只是不理解這個過程。我是否需要扭曲查看原始(未裁剪)的圖像,然後裁剪「拉直」的對象?
有什麼建議嗎?OpenCV 2.4.3 - 在裁剪後的圖像上具有反轉單應矩陣的warpPerspective
2
A
回答
1
試試這個。
考慮到您的對象的輪廓不相關(例如,框輪廓的外角點),您可以使用逆單應矩陣將它們轉換並調整該單應矩陣以將該轉換的結果放置到左上角區域圖片。
計算其中那些對象點將被扭曲至(使用逆單應性和所述輪廓點作爲輸入):
cv::Rect computeWarpedContourRegion(const std::vector<cv::Point> & points, const cv::Mat & homography) { std::vector<cv::Point2f> transformed_points(points.size()); for(unsigned int i=0; i<points.size(); ++i) { // warp the points transformed_points[i].x = points[i].x * homography.at<double>(0,0) + points[i].y * homography.at<double>(0,1) + homography.at<double>(0,2) ; transformed_points[i].y = points[i].x * homography.at<double>(1,0) + points[i].y * homography.at<double>(1,1) + homography.at<double>(1,2) ; } // dehomogenization necessary? if(homography.rows == 3) { float homog_comp; for(unsigned int i=0; i<transformed_points.size(); ++i) { homog_comp = points[i].x * homography.at<double>(2,0) + points[i].y * homography.at<double>(2,1) + homography.at<double>(2,2) ; transformed_points[i].x /= homog_comp; transformed_points[i].y /= homog_comp; } } // now find the bounding box for these points: cv::Rect boundingBox = cv::boundingRect(transformed_points); return boundingBox; }
修改逆單應性(computeWarpedContourRegion和inverseHomography作爲輸入的結果)
cv::Mat adjustHomography(const cv::Rect & transformedRegion, const cv::Mat & homography) { if(homography.rows == 2) throw("homography adjustement for affine matrix not implemented yet"); // unit matrix cv::Mat correctionHomography = cv::Mat::eye(3,3,CV_64F); // correction translation correctionHomography.at<double>(0,2) = -transformedRegion.x; correctionHomography.at<double>(1,2) = -transformedRegion.y; return correctionHomography * homography; }
你要給像
cv::warpPerspective(objectWithBackground, output, adjustedInverseHomography, sizeOfComputeWarpedContourRegionResult);
希望這有助於=)
相關問題
- 1. OpenCV 2.4.3(iOS)中的裁剪墊圖像
- 2. 在opencv中裁剪圖像
- 3. OpenCV裁剪矩形
- 4. 裁剪矩陣
- 5. 在圖像上反轉矩陣轉換
- 6. OpenCV裁剪圖像失真
- 7. 用OpenCV裁剪圖像
- 8. 使用openCV裁剪圖像
- 9. OpenCV cvRemap裁剪圖像
- 10. 旋轉裁剪圖像後獲取新的裁剪座標
- 11. 某些圖像在裁剪後旋轉
- 12. 使用openCV裁剪圖像使用Android二進制文件的矩陣
- 13. OpenCV:高斯模糊的裁剪圖像
- 14. 裁剪圖像反應母語
- 15. 使用opencv在android中裁剪圖像
- 16. 在OpenCV中裁剪全景圖像
- 17. 如何在裁剪後上傳圖像?
- 18. 在opencv中裁剪一個旋轉的圖像
- 19. 如何獲得在OpenCV魚眼校準後的裁剪圖像
- 20. 使用Numpy陣列的OpenCV Python裁剪圖像
- 21. OpenCV - 應用霍夫線變換後裁剪圖像
- 22. 自定義矩形的圖像裁剪
- 23. 使用OpenCV裁剪最大的矩形
- 24. 將轉換矩陣應用於OpenCV圖像中的像素
- 25. 展開並裁剪矩陣
- 26. 在opencv中裁剪矩形區域
- 27. 從現有圖像中裁剪圖像
- 28. 的OpenCV的Python:旋轉圖像不裁剪邊
- 29. 在裁剪視圖上旋轉的肖像圖像
- 30. 圖像轉換矩陣OpenCV中
喜做ü找到任何解決辦法? – user1140237
不幸的是,我不得不離開這個來處理另一個項目,但這絕對是我會回頭的。如果你確實想出了一個解決方案,如果你能發佈你的發現,那將是非常好的! –
米能夠建立圖書館使用衝浪和篩選兩個,但問題是我必須爲Android實施..所以工作... ... – user1140237