YUVデータの画像バッファをQImage(RGBA8888フォーマット)に変換しようとしています。ここでデータバッファ(YUV)をQImage(RGBA)に変換する
はIplImageへのバッファからの変換です:
void DeckLinkCaptureDelegate::convertFrameToOpenCV(void* frameBytes, IplImage * m_RGB){
if(!m_RGB) m_RGB = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
unsigned char* pData = (unsigned char *) frameBytes;
for(int i = 0, j=0; i < width * height * 3; i+=6, j+=4)
{
unsigned char u = pData[j];
unsigned char y = pData[j+1];
unsigned char v = pData[j+2];
//fprintf(stderr, "%d\n", v);
m_RGB->imageData[i+2] = 1.0*y + 8 + 1.402*(v-128); // r
m_RGB->imageData[i+1] = 1.0*y - 0.34413*(u-128) - 0.71414*(v-128); // g
m_RGB->imageData[i] = 1.0*y + 1.772*(u-128) + 0; // b
y = pData[j+3];
m_RGB->imageData[i+5] = 1.0*y + 8 + 1.402*(v-128); // r
m_RGB->imageData[i+4] = 1.0*y - 0.34413*(u-128) - 0.71414*(v-128); // g
m_RGB->imageData[i+3] = 1.0*y + 1.772*(u-128) + 0;
}
}
目標はQImageのオブジェクトにIplImageへ* m_RGBを置き換えることであろう。 QImageのフォーマットは、後でQImageフォーマットを変換するQt関数で変更することができます。私はIplImageからQImageを取得することができましたが、IplImageのステップを完全に削除するために、この手順を省略しようとしています。
の問題は、私は私がQImageのためにそれを行うことができるか分からないので、上記のコードを理解するのに苦労を抱えている、です。
私はそれをやってもらえますか、少なくとも上記のコードを理解することはできますか?
ありがとうございました。
編集:これは私が今のところ持っているものですが、機能しません。
void DeckLinkCaptureDelegate::convertFrameToOpenCV(void* frameBytes, QImage m_RGB){
//if(!m_RGB) m_RGB = QImage(width, height, QImage::Format_RGB888);
unsigned char* pData = (unsigned char *) frameBytes;
for(int i = 0, j=0; i < width * height * 3; i+=6, j+=4)
{
unsigned char u = pData[j];
unsigned char y = pData[j+1];
unsigned char v = pData[j+2];
//fprintf(stderr, "%d\n", v);
m_RGB.bits()[i+2] = 1.0*y + 8 + 1.402*(v-128); // r
m_RGB.bits()[i+1] = 1.0*y - 0.34413*(u-128) - 0.71414*(v-128); // g
m_RGB.bits()[i] = 1.0*y + 1.772*(u-128) + 0; // b
y = pData[j+3];
m_RGB.bits()[i+5] = 1.0*y + 8 + 1.402*(v-128); // r
m_RGB.bits()[i+4] = 1.0*y - 0.34413*(u-128) - 0.71414*(v-128); // g
m_RGB.bits()[i+3] = 1.0*y + 1.772*(u-128) + 0;
}
}
場合RU割り当てメモリm_RGB(QImageの)か? – danishansari
.hファイルにオブジェクトQImage * m_RGBを作成し、次にm_RGB =新しいQImage(幅、高さ、QImage :: Format_RGB888)を作成します。 – Megatron300
ポインタ(m_RGB)の場合、 ''。 ''演算子 'm_RGB.bits()[i + 5]'と関数引数ではポインタではなく、どのようにbits()を呼び出していますか? – danishansari