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の倍数ではありません)。
正しい出力が得られなかった後でも、linesize変数が更新されました。 幅が4の倍数の画像を使用していてもうまく動作します。
コード内の問題は誰にでも分かります。