2014-04-01 57 views
1

好的抱歉,再次詢問幾乎相同的問題,但我已經嘗試了很多方法,而且我仍然無法做我想要做的事情,我甚至不確定單獨使用opencv是可能的。 我旋轉了一個圖像,我想將它複製到另一個圖像中。問題是,無論我裁剪此旋轉圖像的方式如何,它總是在第二個圖像內以其周圍的非旋轉方形複製。在下面的圖片中可以看到(忘記白色部分確定)。我只是想刪除條紋部分。 我相信我的問題是我的ROI複製圖像,因爲此ROI是rect而不是RotatedRect。在下面的代碼中可以看到。是否有可能使用opencv將旋轉的圖像複製到另一個圖像的旋轉ROI?

cv::Rect roi(Pt1.x, Pt1.y, ImageAd.cols, ImageAd.rows); 
ImageAd.copyTo(ImageABC(roi)); 

但在下面的代碼我不能用rotatedRect CopyTo從像...

cv::RotatedRect roi(cent, sizeroi, angled); 
ImageAd.copyTo(ImageABC(roi)); 

那麼有沒有這樣做的一種方式就是我想要在OpenCV中? 謝謝!

enter image description here

使用下面的面具方法後,我得到這個形象作爲其看到的是在我使用說得清形象我想複製我旋轉圖像的ROI切斷。現在基本上我已經掩蓋了圖像,我該如何選擇將這個蒙版圖像放入第二張圖像的位置。目前我使用矩形,但不會工作,因爲我的圖像不再是矩形,而是旋轉矩形。看看代碼,看看我現在做錯了(它切斷了,如果我把rect放大一個異常拋出)。

cv::Rect roi(Pt1.x, Pt1.y, creditcardimg.cols, creditcardimg.rows); 
     creditcardimg.copyTo(imagetocopyto(roi),mask); 

enter image description here

enter image description here

+1

你想從或到旋轉矩形複製?使用蒙版的想法是:1.源是旋轉的圖像。 2.旋轉矩形在旋轉的圖像內部構建旋轉。 3.創建一個看起來像旋轉矩形的遮罩。 4.僅使用該掩碼進行復制。 5.結果是隻有旋轉矩形中的像素在黑色背景下可見的圖像。 – Micka

+0

這兩種都是因爲在爲我想要複製的圖像制定了蒙版之後,我還想將此圖像(僅蒙版位)放到另一個圖像中。現在的問題是我怎麼能指定在copyTo我想要放置這個旋轉和蒙版圖像的座標。如果我使用rect roi,它將被放置在另一個不真正幫助的非旋轉矩形內。 – OneTwo

+0

[此解決方案]有什麼問題(http://stackoverflow.com/questions/22662971/insert-a-rotated-and-skewed-image-into-a-detected-rectangle-in-another-image-wit/ 22681411#22681411)到你以前的問題? – AldurDisciple

回答

4

相反的投資回報率,你可以用面膜來複制,

  1. 首先使用旋轉矩形創建的面具。

  2. 源圖像複製到目標圖像使用此掩模

見下面的C++代碼

你的旋轉RECT和我人工計算。

RotatedRect rRect = RotatedRect(Point2f(140,115),Size2f(115,80),192); 

使用繪製輪廓創建遮罩。

Point2f vertices[4]; 
    rRect.points(vertices); 
    Mat mask(src.rows, src.cols, CV_8UC1, cv::Scalar(0)); 
    vector< vector<Point> > co_ordinates; 
    co_ordinates.push_back(vector<Point>()); 
    co_ordinates[0].push_back(vertices[0]); 
    co_ordinates[0].push_back(vertices[1]); 
    co_ordinates[0].push_back(vertices[2]); 
    co_ordinates[0].push_back(vertices[3]); 
    drawContours(mask,co_ordinates,0, Scalar(255),CV_FILLED, 8); 

最後使用上述掩碼將源複製到目的地。

Mat dst; 
    src.copyTo(dst,mask); 

enter image description hereenter image description here

+0

好的,謝謝,所以我創建了一個只包含點在rotateRect裏面,然後我用 'Mat :: copyTo(OutputArray m,InputArray mask)' 複製到圖像? – OneTwo

+0

看到我更新的答案.... – Haris

+0

謝謝,但它不起作用。輸出圖像不包含我想要複製到的圖像中的任何像素。如上圖所示。 – OneTwo