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

ios AVCaptureVideoPreviewLayer 在相机和屏幕坐标之间转换

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

我使用 AVCaptureVideoPreviewLayer 显示预览视频层,从该预览中采样图像并对其进行一些处理。 该处理识别图像上的一些点并返回它们。我想(几乎)实时在预览层上显示这些点。

我在转换这些点时遇到了一些麻烦,尤其是在方向之间切换时。

这就是我安装预览层的方式:

self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];
self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

这就是我从图层获取图像的方式:

- (void)processPixelBuffer: (CVImageBufferRef)pixelBuffer {

  CVPixelBufferLockBaseAddress( pixelBuffer, 0 );



  CVPixelBufferLockBaseAddress(pixelBuffer,0);
  uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(pixelBuffer);
  size_t bbytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer);
  size_t width = CVPixelBufferGetWidth(pixelBuffer);
  size_t height = CVPixelBufferGetHeight(pixelBuffer);
  CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  CGContextRef myContext = CGBitmapContextCreate(baseAddress, width, height, 8, bbytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);   

  self.cgImage = CGBitmapContextCreateImage(myContext);
  CVPixelBufferUnlockBaseAddress( pixelBuffer, 0 );

  //image processing ...
}

现在我得到的是这个图像坐标系中的点。 我需要的是一种将其转换为屏幕坐标以在屏幕上呈现的方法

有什么想法吗?



Best Answer-推荐答案


好的,所以在重新阅读 AVCapturePreviewLayer API 之后,这里有一个非常简单的解决方案:

CGFloat imWidth = CGImageGetWidth(self.cgImage);
CGFloat imHeight = CGImageGetHeight(self.cgImage);

CGPoint point = /* point in image coordinates*/;
point.x = point.x/imWidth;
point.y = point.y/imHeight;
CGPoint screenPoint = [self.previewLayer pointForCaptureDevicePointOfInterest:point];

一开始尝试了这种方法,但结果很奇怪,因为我忘记按照这个函数文档的要求将坐标标准化为 0.0 到 1.0 之间的值。

顺便说一句,其他方法也可以使用该方法

captureDevicePointOfInterestForPoint:

关于ios AVCaptureVideoPreviewLayer 在相机和屏幕坐标之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25244141/

回复

使用道具 举报

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

本版积分规则

关注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