我試圖將RGB圖像轉換爲YUV。 我使用openCV加載圖像。FFmpeg中RGB到YUV轉換的錯誤
我打電話的功能如下:
//I know IplImage is outdated
IplImage* im = cvLoadImage("1.jpg", 1);
//....
bgr2yuv(im->imageData, dst, im->width, im->height);
功能轉換彩色圖像YUV下圖中給出。 我正在使用ffmpeg來做到這一點。
void bgr2yuv(unsigned char *src, unsigned char *dest, int w, int h)
{
AVFrame *yuvIm = avcodec_alloc_frame();
AVFrame *rgbIm = avcodec_alloc_frame();
avpicture_fill(rgbIm, src, PIX_FMT_BGR24, w, h);
avpicture_fill(yuvIm, dest, PIX_FMT_YUV420P, w, h);
av_register_all();
struct SwsContext * imgCtx = sws_getCachedContext(imgCtx,
w, h,(::PixelFormat)PIX_FMT_BGR24,
w, h,(::PixelFormat)PIX_FMT_YUV420P,
SWS_BICUBIC, NULL, NULL, NULL);
sws_scale(imgCtx, rgbIm->data, rgbIm->linesize,0, h, yuvIm->data, yuvIm->linesize);
av_free(yuvIm);
av_free(rgbIm);
}
轉換後出現錯誤輸出。 我想這是由於填充發生在IplImage。 (我的輸入圖像寬度不是4的倍數)。
即使在我沒有得到正確的輸出之後,我更新了lineize變量。 當我使用寬度爲4的倍數的圖像時,它的工作正常。
任何人都可以告訴代碼中存在什麼問題。