首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xcode CVpixelBuffer显示负值

xcode CVpixelBuffer显示负值
EN

Stack Overflow用户
提问于 2015-01-26 12:55:22
回答 1查看 174关注 0票数 2

我正在使用xcode,目前正在尝试使用以下代码从像素缓冲区中提取像素值。但是,当我打印出像素值时,它由负值组成。有人曾经遇到过这样的问题吗?

代码的一部分如下所示

代码语言:javascript
复制
- (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
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-26 15:03:07

问题是,imageData of IplImage是一个签名的char。因此,任何大于127的东西都会出现为负数。

您可以简单地将其赋值给一个unsigned char,然后打印它,然后您将看到介于0到255之间的值,就像您可能预期的那样:

代码语言:javascript
复制
for (int i = 0; i < Temporary->width * Temporary->height; ++i) {
    unsigned char c = Temporary->imageData[i];
    NSLog(@"Pixel value: %u", c);
}

或者你可以用十六进制打印出来:

代码语言:javascript
复制
NSLog(@"Pixel value: %02x", c);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28150512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档