1
我試圖對YUV格式的OpenCV圖像進行圖像穩定,其中有2個通道:一個包含Y值,另一個包含交替的U/V值(在OpenCV中的YUV_YUY2)。OpenCV矩陣運算導致YUV圖像顏色損壞
我遇到的問題是,某些矩陣操作(特別是warpAffine和調整大小)可能會移動數組,使U值最終位於V位置,反之亦然,顛倒顏色或導致圖像出現條紋。我的第一個想法是,我可以將圖像轉換爲不同的(非交錯圖像)圖像類型,應用轉換,然後轉換回來,但是使用我發現的cvtColor()可用的轉換: http://docs.opencv.org/3.1.0/d7/d1b/group__imgproc__misc.html
我可以將YUV_YUY2轉換成其他格式,但沒有可用的轉換回YUV_YUY2格式。
我可能能夠手動重建YUY2矩陣,但我懷疑有可能是我失蹤的更簡單的方法。任何OpenCV大師都有什麼建議?謝謝。
代碼片段:
cv::Mat stabilize (VideoFrame* curFrame, VideoFrame* prevFrame)
{
Mat locCurMat, locPrevMat;
locCurMat = Mat(1080, 1920, CV_8UC2, curFrame->video);
locPrevMat = Mat(1080, 1920, CV_8UC2, prevFrame->video);
// Calculate the transformation matrix
Mat locTransform;
// I’ll spare you this part
// …
// Apply the transformation
Mat locStabFrame;
// Make the border value (0, 128) for black:
// If you leave it at 0,0 it's bright green
Scalar locBorderVal(0, 128);
warpAffine(locCurMat, locStabFrame, locTransform, locCurMat.size(),
INTER_LINEAR, BORDER_CONSTANT, locBorderVal);
// Crop the borders to make the video look better
// Get the aspect ratio correct
int locVertBorder = HORIZONTAL_BORDER_CROP *
locCurMat.rows/locCurMat.cols;
locStabFrame = locStabFrame(
Range(locVertBorder, locStabFrame.rows - locVertBorder),
Range(HORIZONTAL_BORDER_CROP,
locStabFrame.cols - HORIZONTAL_BORDER_CROP));
// Resize locStabFrame back to the proper frame size
resize(locStabFrame, locStabFrame, locCurMat.size());
// Return the stabilized result
return locStabFrame;
}
好像在API中一個大洞不能夠轉換回YUY2,不是嗎? –
是的,看起來很奇怪,他們會讓你轉換出這種格式,但不會回到它。 – npulaski