#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace cv;
using namespace std;
#define nWidth 1280
#define nHeight 960
#define FrameSize nWidth*nHeight*3/2
#define YSize nWidth*nHeight
#define USize nWidth*nHeight / 4
#define VSize nWidth*nHeight / 4
int main(int argc, char* argv[]){
int i, k;
Mat tmp, tmpY;
FILE *f ;
if(!(f = fopen("1.yuv","rb"))){
printf("file open error!");
}
Mat yMat = Mat(cvSize(nWidth, nHeight), CV_8UC1, cv::Scalar(0, 0, 0));
Mat uMat = Mat(cvSize(nWidth/2, nHeight/2), CV_8UC1, cv::Scalar(0, 0, 0));
Mat vMat = Mat(cvSize(nWidth/2, nHeight/2), CV_8UC1, cv::Scalar(0, 0, 0));
Mat rgbMat = Mat(cvSize(nWidth/2, nHeight/2), CV_8UC3, cv::Scalar(0, 0, 0));
uchar* yPtr = yMat.ptr(0);
uchar* uPtr = uMat.ptr(0);
uchar* vPtr = vMat.ptr(0);
uchar* rgbPtr = rgbMat.ptr(0);
unsigned char *pBuf = new unsigned char[FrameSize];
fread(pBuf, 1, FrameSize, f);
for(i=0; i
yPtr[i] = pBuf[i];
}
k=0;
for(i=YSize; i< FrameSize;){
uPtr[k] = pBuf[i];
vPtr[k] = pBuf[i+1];
i += 2;
k += 1;
}
resize(yMat, tmpY, cvSize(nWidth/2, nHeight/2));
yPtr = tmpY.ptr(0);
for(i=0; i
rgbPtr[i*3 + 2] = yPtr[i] + 1.772 * (uPtr[i] - 128); //R
rgbPtr[i*3 + 1] = yPtr[i] - 0.34413 * (uPtr[i] - 128) - 0.71414 * (vPtr[i] - 128); //G
rgbPtr[i*3 + 0] = yPtr[i] + 1.402 * (vPtr[i] - 128); //G
}
imshow("new.jpg", rgbMat);
imshow("U", uMat);
imshow("v", vMat);
imshow("Y", tmpY);
cvWaitKey( 0 );
return 0;
}