0
私は、YUV420pフォーマットのフレーム560x320を含んでいます。 1フレームのサイズは268800バイト(YUV420pは12ビット/ピクセルなので560x320x12ビット/ 8)でなければなりません。QByteArrayから適切なcv :: Matを作成し、YUV420pフレームを受け取ります
qint64 SIZE_OF_YUV420p_FRAME = 268800;
QByteArray sendBuffer;
QFile file("/home/YUVdecoding/small.yuv");
if(file.open(QIODevice::ReadOnly))
{
while (!file.atEnd()) {
sendBuffer = file.read(SIZE_OF_YUV420p_FRAME); //capture one frame
cv::Mat yuvImg = cv::Mat(560+280,320,CV_8UC1,sendBuffer.data()); //translating QByteArray to Mat
cv::Mat rgbImage;
cv::cvtColor(yuvImg,rgbImage,cv::COLOR_YUV420p2RGB);// converting to RGB
cv::imshow("bgr",rgbImage);
cv::waitKey(30);
}
}
file.close();
yuvImg行があるのはなぜ560 + 280:
は、だから私は、QByteArrayの各268800のバイトを格納し、ファイルを開くと、それはフレームごとに読んで? 560その致命的なエラーであり、私はインターネットでこのコードスニペットを見つけwhy.Then知らないので:QVideoFrame copy(frame);
if (frame.isValid() && copy.map(QAbstractVideoBuffer::ReadOnly)) {
Mat frameYUV=Mat(copy.height() + copy.height()/2, copy.width(),CV_8UC1, (void*)copy.bits());
Mat frameRGB;
cvtColor(frameYUV, frameRGB, CV_YUV2BGRA_I420);
imshow("Video", frameRGB);
}
は、だからここにその高さ+高さ/ 2、私はそれ(560/2 = 280)を試してみました。突然、それは動作しますが、ビデオはよく遊んでますが、すべてのフレームは、このような になります。それも間違った解像度を持っている
。私は別のマットサイズウィットを果たしたとはい、それは画像が表示されているか、適切にafffectsが、私は元のフレームの外観を達することができない
:.yuvファイル内
オリジナルフレームは、次のようになります。 QByteArrayからMatを正しく作成する方法は?適切なマットサイズを数えるには?
あなたのマットの高さと幅が間違っています。 – Silencer
画像フォーマット(チャンネル)を確認してください - あなたが見ているエラーは、例えばRGBAとしてRGBAマットを表示しようとするようなものです。それはあなたの画像の幅と高さを台無しにする可能性がありますまた、あなたが見ているピクセルでこの混乱の原因となる... –
@ Silencer、どのように右にカウントするには? –