我正在使用xcode,目前正在尝试使用以下代码从像素缓冲区中提取像素值。但是,当我打印出像素值时,它由负值组成。有人曾经遇到过这样的问题吗?
代码的一部分如下所示
- (void)captureOutput:(AVCaptureOutput*)captureOutput didOutputSampleBuffer:
(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection*)connection
{
CVImageBufferRef Buffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(Buffer, 0);
uint8_t* BaseAddress = (uint8_t*)CVPixelBufferGetBaseAddressOfPlane(Buffer, 0);
size_t Width = CVPixelBufferGetWidth(Buffer);
size_t Height = CVPixelBufferGetHeight(Buffer);
if (BaseAddress)
{
IplImage* Temporary = cvCreateImage(cvSize(Width, Height), IPL_DEPTH_8U, 4);
Temporary->imageData = (char*)BaseAddress;
for (int i = 0; i < Temporary->width * Temporary->height; ++i) {
NSLog(@"Pixel value: %d",Temporary->imageData[i]);
//where i try to print the pixels
}
}发布于 2015-01-26 15:03:07
问题是,imageData of IplImage是一个签名的char。因此,任何大于127的东西都会出现为负数。
您可以简单地将其赋值给一个unsigned char,然后打印它,然后您将看到介于0到255之间的值,就像您可能预期的那样:
for (int i = 0; i < Temporary->width * Temporary->height; ++i) {
unsigned char c = Temporary->imageData[i];
NSLog(@"Pixel value: %u", c);
}或者你可以用十六进制打印出来:
NSLog(@"Pixel value: %02x", c);https://stackoverflow.com/questions/28150512
复制相似问题