EDIT:質問は不明ですが、私は詳細を更新して追加しました。YUVからRGBへの変換中に垂直にバッファを反転するには
私はRGB形式に変換する画像データ(YUV形式)のバッファを持っています。問題は、画像を垂直方向に反転させることです(Y位置を反転する)。
私が今できることは、YUVデータをバッファ内のRGBデータに変換してから、このバッファを垂直に反転させることです。私はパフォーマンスを得るためにしたいと思っ何
unsigned char* DeckLinkCaptureDelegate::convertYUVtoRGB(void* frameBytes)
{
unsigned char *mycopy = new unsigned char[height*width*3];
unsigned char *flippedCopy = new unsigned char[height*width*3];
unsigned char* pData = (unsigned char *) frameBytes;
//Conversion from YUV to RGB
for(int i = 0, j=0; i < width * height * 3; i+=6, j+=4)
{
unsigned char v = pData[j];
unsigned char y = pData[j+1];
unsigned char u = pData[j+2];
mycopy[i+2] = 1.0*y + 8 + 1.402*(v-128); // r
mycopy[i+1] = 1.0*y - 0.34413*(u-128) - 0.71414*(v-128); // g
mycopy[i] = 1.0*y + 1.772*(u-128) + 0; // b
y = pData[j+3];
mycopy[i+5] = 1.0*y + 8 + 1.402*(v-128); // r
mycopy[i+4] = 1.0*y - 0.34413*(u-128) - 0.71414*(v-128); // g
mycopy[i+3] = 1.0*y + 1.772*(u-128) + 0;
}
//Vertical flip
for (int i = 0; i < width; ++i) {
for (int j = 0; j < height; ++j) {
for (int k = 0; k < 3; ++k) {
flippedCopy[(i + j * width) * 3 + k] = mycopy[(i + (height - 1 - j) * width) * 3 + k];
}
}
}
return flippedCopy;
}
が YUVからRGBへの変換時にバッファを反転である:ここでは
は、このために動作するコードです。私はそれを行う方法を知りませんでしたし、ユスフの答えは私を助けたので、ここで私は一瞬のために持っているものです。
unsigned char* DeckLinkCaptureDelegate::convertYUVtoRGB(void* frameBytes)
{
unsigned char *mycopy = new unsigned char[height*width*3];
unsigned char* pData = (unsigned char *) frameBytes;
int k = height - 1;
for(int i = 0, j=0; i < width * height * 3; i+=6, j+=4)
{
unsigned char v = pData[j];
unsigned char y = pData[j+1];
unsigned char u = pData[j+2];
mycopy[(width*k*3) + i+2] = 1.0*y + 8 + 1.402*(v-128); // r
mycopy[(width*k*3) + i+1] = 1.0*y - 0.34413*(u-128) - 0.71414*(v-128); // g
mycopy[(width*k*3) + i] = 1.0*y + 1.772*(u-128) + 0; // b
y = pData[j+3];
mycopy[(width*k*3) + i+5] = 1.0*y + 8 + 1.402*(v-128); // r
mycopy[(width*k*3) + i+4] = 1.0*y - 0.34413*(u-128) - 0.71414*(v-128); // g
mycopy[(width*k*3) + i+3] = 1.0*y + 1.772*(u-128) + 0;
if (<i multiple of (width*3)-1>){
k = k - 2;
}
}
return mycopy;
}
私が正しいんだ場合は、これはif
条件が正しいと仮定すると、動作するはずです。しかし、私はi
が6ずつインクリメントされているので、このif
状態を表現する方法がわからないので、私は、私は十分に明確だ願っていk
をデクリメントする権利瞬間を「スキップ」かもしれません。ありがとう
cと画像処理などだけでなく、としてあなたの質問にタグを付けます。 –
あなたは2つのループを使用し、逆の方法で他の配列に保存することができます...高さのような - 私か何か – retinotop
"ここにコードです" OK。そして?それは動作しますか?それは何をするためのものか?それについてあなたの質問は何ですか? –