2013-07-24 52 views
0

我有四角從圖像中提取,再回到原來的座標,從變形的圖像

std::vector<cv::Point2f> ecken; 
ecken.push_back(corners[0]); 
ecken.push_back(corners[size.height-1]); 
ecken.push_back(corners[size.area()-size.height-1]); 
ecken.push_back(corners[size.area()-1]); 

他們被扭曲在第二圖像:

quad_pts.push_back(cv::Point2f(0, 0)); 
      quad_pts.push_back(cv::Point2f(quad.cols, 0)); 
      quad_pts.push_back(cv::Point2f(quad.cols, quad.rows)); 
      quad_pts.push_back(cv::Point2f(0, quad.rows)); 

     // Get transformation matrix 
      cv::Mat transmtx = cv::getPerspectiveTransform(ecken, quad_pts); 
cv::warpPerspective(src, quad, transmtx, quad.size(),1); 

我要回去從我得到的結果原始圖像,我試過這些:

cv::Mat trans = cv::getPerspectiveTransform(quad_pts,ecken); 
     cv::perspectiveTransform(quad,test,trans); /// I'm not sure that this correct and the program crashes here 

這裏的錯誤信息在控制檯:

OpenCV Error: Assertion failed (scn + 1 == m.cols && (depth == CV_32F || depth = 
= CV_64F)) in unknown function, file ..\..\..\opencv\modules\core\src\matmul.cpp 
, line 1926 

它沒有工作! 任何想法?

+0

複製粘貼從元常見問題解答:如果「出現問題」告訴我們什麼。如果它是一個異常,請發佈完整的堆棧跟蹤。如果這是編譯時錯誤,請發佈確切的錯誤消息。 (不是「這樣的東西」,但剪切和粘貼。) – hivert

+0

@hivert我編輯了我的問題 – Engine

+0

我不是opencv的專家,但這看起來像是圖像和變換之間的格式(尺寸或深度)不匹配。 – hivert

回答

0

您的兩個Mat對象的深度不同。通過打印Mat.depth()來檢查它們是否具有相同的圖像類型。可能是其中之一是灰度和其他顏色。

+0

不,它們具有相同的類型 – Engine