2012-03-30 54 views
2

我從視頻(1.)中捕獲幀,並且想要將此矩形區域作爲子圖像投影到目標圖像中的檢測區域(2.)。是否有可能將視頻幀投影到另一個圖像中?

enter image description here 目標圖像(2.)中的區域不是正交的我已經有了圍繞目標區域繪製線條的座標(由單應性確定)。

是否有任何方法提供將源幀(3.)(例如使用雙線性插值)複製到不同區域(4.)中的目標圖像的功能?

我還需要翻譯smaler(視頻幀)圖像。

+0

您可以通過'cvSetImageROI()'(感興趣的矩形)限制對目標圖像的矩形子區域的操作。完成後,只需將視頻幀'cvResize()'到目的地。 – 2012-03-30 07:00:54

+0

@FrankH謝謝,快速谷歌顯示這個http://nashruddin.com/OpenCV_Region_of_Interest_(ROI)在我的情況下,我已經旋轉了視頻幀,並希望適應在場景中與覆蓋旋轉視頻和它的區別邊界框在我的目標圖像。 – stacker 2012-03-30 07:11:38

+0

或者你是說「不正交」,你的意思是目標是一個旋轉的矩形?在這種情況下,我會使用最終目標「quad」的非旋轉邊界框大小的中間目標圖像,然後執行'getAffineTransform()'和'warpAffine()',最後將該結果進入目的地,該目的地再次被限制在旋轉四方的_bounding box_。最後的混合步驟,以便四邊形外的像素不被觸摸。 – 2012-03-30 07:11:44

回答

2

該圖清楚了確切的需求。像這樣的東西應該這樣做:

void warpVideoToQuad(
    IplImage *videoFrame, 
    IplImage *target, 
    CvSeq *tgt_quad) 
{ 
    int width = videoFrame->width, height = videoFrame->height; 

    CvPoint2D32f src_rect[] = 
     { { 0.0, 0.0 }, { 0.0, height }, { width, height }, { width, 0.0 } }; 
    CvPoint2D32f dst_quad[4]; 

    // a little kludgy as cvGetPerspectiveTransform() and cvBoundingRect() 
    // use different arg types - the former a point array the latter a seq 
    cvCvtSeqToArray(tgt_quad, dst_quad); 

    CvMat *warper = cvCreateMat(3,3,CV_32FC1); 
    CvRect tgt_rect = cvBoundingRect(tgt_quad); 

    IplImage *warpTgt = cvCreateImage(CvSize(tgt_rect.width, tgt_rect.height), 
     videoFrame->depth, videoFrame->nChannels); 
    cvZero(warpTgt); 

    cvGetPerspectiveTransform(src_rect, dst_quad, &warper); 
    cvGetQuadrangleSubPix(videoFrame, warpTgt, warper); 

    cvSetImageROI(target, tgt_rect); 
    cvCopy(warpTgt, target, warpTgt); 
    cvResetImageROI(target); 

    delete warpTgt; 
    delete warper; 
}

我現在不能測試這個,所以只是爲了說明。稍後將進行適當的編輯。

+0

這看起來不錯,我會在稍後測試。 +1 – stacker 2012-03-30 12:49:46

2

我想你想用warpPerspective()來實現這一點。首先通過getPerspectiveTransform()得到適當的透視變換(你在問題中繪製的四邊形不是平行四邊形,所以仿射變換不會這樣做)。該函數將視頻幀的角點([0; 0] [0; frame.cols]等)的像素座標和您在目標區域繪製的線的角點像素座標作爲輸入參數。 現在您已經完成了轉換,請將其與warpPerspective()一起使用,以將視頻幀轉換爲您的目標圖像大小的空白圖像。使用帶有ROI蒙版的複製操作(例如FrankH所描述的)將扭曲區域插入到實際目標圖像中。

相關問題