Ios 从UIImage转换为Mat时丢失数据
我尝试使用HSV阈值在图像中查找红色杯子。我的一个实现使用cvVideoCamera委托,并直接从相机获取一个垫子。我的另一个实现允许用户录制视频,然后我们使用AVFoundation提取帧进行处理 当我对来自AVFoundation的图像设置阈值时,除了黑色图像之外,我什么也没有得到 这是我的密码:Ios 从UIImage转换为Mat时丢失数据,ios,objective-c,opencv,uiimage,computer-vision,Ios,Objective C,Opencv,Uiimage,Computer Vision,我尝试使用HSV阈值在图像中查找红色杯子。我的一个实现使用cvVideoCamera委托,并直接从相机获取一个垫子。我的另一个实现允许用户录制视频,然后我们使用AVFoundation提取帧进行处理 当我对来自AVFoundation的图像设置阈值时,除了黑色图像之外,我什么也没有得到 这是我的密码: inRange(灰色、标量(114、135、135)、标量(142、255、255)、dst) 第一个图像是一个正常工作的图像示例,第二个是来自AVFoundation的图像,它没有达到我所期望的
inRange(灰色、标量(114、135、135)、标量(142、255、255)、dst)代码>
第一个图像是一个正常工作的图像示例,第二个是来自AVFoundation的图像,它没有达到我所期望的阈值,它生成了一个全黑图像
有人知道为什么当杯子的颜色看起来非常相似时,第二个图像会产生不同的结果吗?从视频中提取的图像会以一种依赖于视频编码和压缩编解码器的方式进行重建。简短的版本是,除非你碰巧选择了一个关键帧(你通常没有api来做,所以尝试这样做是不可行的),否则你会得到一个从视频中重建的图像
因此,从同一时间的视频中拍摄的图像与从相机中直接拍摄的图像(假设您可以同时拍摄这两种图像)会有所不同。当然,在任何排序处理之后,都会得到不同的结果
在应用阈值之前,请获取Before方法的原始图像。看看它们(或它们的三角形),你会发现它们不是同一个图像。第二种方法可能会引入从多个帧编码到视频中,然后重构到单帧图像中的伪影 要解决此问题,请使用OpenCV本机转换函数
#import <opencv2/imgcodecs/ios.h>
UIImage* MatToUIImage(const cv::Mat& image);
void UIImageToMat(const UIImage* image,
cv::Mat& m, bool alphaExist = false);
#导入
UIImage*MatToUIImage(常数cv::Mat&image);
无效UIImageToMat(常量UIImage*图像,
cv::Mat&m,布尔字母EXIST=假);