uvc相機支援v4l2程式設計,採集格式若只支援yuv422,使用libjpeg等壓縮速度降低,直接儲存bmp點陣圖速度加快.
關於v4l2對於相機的初始化部分進行省略.
分為幾個關鍵步驟進行轉換:
1:初始化正常
2:將底層獲取與申請的記憶體存入快取進行mmap進行記憶體對映,核心空間的位址不能直接被使用者空間使用
struct buffer*buffers;
//mmap for buffers
buffers = (struct buffer*)malloc(req.count*sizeof (*buffers));
buffers[n_buffers].length = buf.length;
//map
buffers[n_buffers].start = mmap(null,buf.length,prot_read |prot_write, map_shared, fd, buf.m.offset);inx
進行記憶體對映後,可以開始採集,取出快取中的取樣快取,該buffers結構體中儲存的為yuyv資料
3:對yuyv資料進行rgb888轉換
基本思路:
yuv422採集類似隔點取樣儲存格式編碼.若採集為800*600影象資料
實際在原始的資料中width的資料為800*2.height不變為600.
進行轉換時候.for(i=0;ifor(j=0;jy1 = *( pointer + (i*imagewidth/2+j)*4+0);
// u = *( pointer + (i*imagewidth/2+j)*4 + 1);
y2 = *( pointer + (i*imagewidth/2+j)*4 + 2);
//v = *( pointer + (i*imagewidth/2+j)*4 + 3);
v = *( pointer + (i*imagewidth/2+j)*4 + 1);
u = *( pointer + (i*imagewidth/2+j)*4 + 3);
解析對於yuv422取樣,思路是將列中,每次取4個位元組,以4個位元組為單位
所以for(j=0;j<(width*2)/4;j++) 若取指定的位置的資料
i*(width*2)跳過該行之前的資料,j*4某一列的單位的資料
*pointer指向資料的起始位址,乙個單位的資料4個位元組分別存放yuyv;
所以y1=*(pointer+i*(width*2)+j*4 + 0)又由於bmp中儲存g b分量是顛倒的
v = *(pointer+i*(width*2)+j*4 + 1) ,y2=*(pointer+i*(width*2)+j*4 + 2)
u = *(pointer+i*(width*2)+j*4 + 3);
再此基礎上再進行bgr的轉換,下面的公式進行了白平衡處理
b1 = (1.164*(y1-16)+1.159*(v-128));
g1 = (1.164*(y1-16)-0.392*(u-128)-0.813*(v-128));
r1 = (1.164*(y1-16)+2.018*(u-128));
b2 = (1.164*(y2-16)+1.159*(v-128));
g2 = (1.164*(y2-16)-0.392*(u-128)-0.813*(v-128));
r2 = (1.164*(y2-16)+2.018*(u-128));
由於rgb格式為3個位元組乙個畫素,使用rgb轉換bmp時候.
unsigned char frame_buffer[width*height*3];
*(frame_buffer + (i*imagewidth/2+j)*6 ) = (unsigned char)b1;
*(frame_buffer + (i*imagewidth/2+j)*6 + 1) = (unsigned char)g1;
*(frame_buffer + (i*imagewidth/2+j)*6 + 2) = (unsigned char)r1;
*(frame_buffer + (i*imagewidth/2+j)*6 + 3) = (unsigned char)b2;
*(frame_buffer + (i*imagewidth/2+j)*6 + 4) = (unsigned char)g2;
*(frame_buffer + (i*imagewidth/2+j)*6 + 5) = (unsigned char)r2;
原理同上
RGB565和RGB888的轉換
1 rgb565或rgb16格式說明 rgb565彩色模式也稱rgb16彩色模式,指的是用16位表示乙個畫素,即 乙個畫素佔兩個位元組,其中 第乙個位元組的前5位用來表示r red 第乙個位元組的後三位 第二個位元組的前三位用來表示g green 第二個位元組的後5位用來表示b blue 如 15 ...
YUV422格式訊號格式 以備學習之用
yuv422格式,又分為很多小類,按照u v的排列可以有yuyv,yvyu,uyvy,vyuy四種,其中,yuyvy一般又稱作yuv2格式。而這四種yuv422格式,每種又可以分為2小類,按y和uv的排列可以有打包格式和平面格式。例如,乙個640 480 2的yuv檔案,打包格式就是yuyvyuyv...
luvcview原始碼之YUV轉RGB
rgb是一種影象格式,是影象最原始的色彩,顯示 處理和識別也都是基於rgb格式,而一般攝像頭常用的輸出格式是yuv,要對攝像頭影象顯示和處理第一步就要把yuv轉換為rgb。yuv有幾種格式,比如yuv444,yuv422,yuv420等 rgb也有多種格式比如rgb444 rgb565 rgb888...