• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - xcode CVpixelBuffer 显示负值

[复制链接]
菜鸟教程小白 发表于 2022-12-13 05:00:52 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

部分代码如下

- (void)captureOutputAVCaptureOutput*)captureOutput didOutputSampleBuffer:
(CMSampleBufferRef)sampleBuffer fromConnectionAVCaptureConnection*)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(@"ixel value: %d",Temporary->imageData[i]);
        //where i try to print the pixels
    }
}



Best Answer-推荐答案


问题是 IplImageimageData 是签名的 char。因此,任何大于 127 的都将显示为负数。

您可以简单地将其分配给 unsigned char,然后将其打印出来,您将看到 0 到 255 之间的值,正如您可能预期的那样:

for (int i = 0; i < Temporary->width * Temporary->height; ++i) {
    unsigned char c = Temporary->imageData[i];
    NSLog(@"ixel value: %u", c);
}

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

NSLog(@"ixel value: %02x", c);

关于ios - xcode CVpixelBuffer 显示负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28150512/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap