如何在CVImageBufferRef视频帧上进行操作

时间:2013-08-14 07:31:05

标签: iphone ios image-processing

- (void)processPixelBuffer: (CVImageBufferRef)pixelBuffer 
{
    CVPixelBufferLockBaseAddress( pixelBuffer, 0 );

    int bufferWidth = CVPixelBufferGetWidth(pixelBuffer);
    int bufferHeight = CVPixelBufferGetHeight(pixelBuffer);
    unsigned char *pixel = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBuffer);

    for( int row = 0; row < bufferHeight; row++ ) {     
        for( int column = 0; column < bufferWidth; column++ ) {
            pixel[1] = 0; //  it sets the green element of each pixel to zero, which gives the entire frame a purple tint.
            pixel += 4;
        }
    }

    CVPixelBufferUnlockBaseAddress( pixelBuffer, 0 );
}

我的问题是我如何操纵像素,所以黑暗的所有亮色变为黄色,所有深色变为蓝色

非常感谢你

1 个答案:

答案 0 :(得分:1)

亮度可表示为Y = 0.2126 R + 0.7152 G + 0.0722 B

 float threshold = 122; // for example
 float luma = 0.2126*pixel[0]+0.7152*pixel[1]+0.0722*pixel[2];
 if(luma>threshold){
   pixel[0]=255;
   pixel[1]=255;
   pixel[2]=0;
 }else{
   pixel[0]=0;
   pixel[1]=0;
   pixel[2]=255;
 }