Ios 从Mat创建UIImage后OpenCV UIImageView setImage不工作
我想尝试一个简单的OpenCV示例,如下所示:Ios 从Mat创建UIImage后OpenCV UIImageView setImage不工作,ios,opencv,Ios,Opencv,我想尝试一个简单的OpenCV示例,如下所示: Mat greyMat; cvtColor(image, greyMat, CV_BGR2GRAY); filtered_image = [self UIImageFromCVMat:greyMat]; [color_filtered_view setImage:filtered_image]; 其中,图像只是另一个垫子(从相机获得),按下按钮后执行 不幸的是,什么也没有发生。图像视图保持空白 setNeedsLayout和setNeedsDis
Mat greyMat;
cvtColor(image, greyMat, CV_BGR2GRAY);
filtered_image = [self UIImageFromCVMat:greyMat];
[color_filtered_view setImage:filtered_image];
其中,图像只是另一个垫子(从相机获得),按下按钮后执行
不幸的是,什么也没有发生。图像视图保持空白
setNeedsLayout和setNeedsDisplay没有帮助,但如果我旋转设备(并强制布局适应其他方向),图像会突然可见
怎么了
更新:
发现这个问题仅仅是因为CvVideoCamera正在流式传输到另一个视图,而不是因为Mat到UIImage的转换。问题是,为什么(正在运行的CvVideoCamera)会阻止setImage?代码中的问题是,通过复制src图像,可以将整个图像复制到裁剪图像中。有两种可能性: 1-不复制数据。和你一样。但是没有第二步。在这种情况下,croppedImage不是真实副本,它指向在src中分配的数据:
cv::Mat croppedImage = src(myRoi);
2-复制数据
cv::Mat croppedImage;
cv::Mat(src, myRoi).copyTo(croppedImage)
使用此链接可以更好地理解。我希望它对你有用 代码中的问题是,通过复制src图像,可以将整个图像复制到裁剪后的图像中。有两种可能性: 1-不复制数据。和你一样。但是没有第二步。在这种情况下,croppedImage不是真实副本,它指向在src中分配的数据:
cv::Mat croppedImage = src(myRoi);
2-复制数据
cv::Mat croppedImage;
cv::Mat(src, myRoi).copyTo(croppedImage)
使用此链接可以更好地理解。我希望它对你有用 今天我遇到了同样的问题,我相信这与setImage调用是从另一个线程调用有关。此代码适用于我:
dispatch_sync(dispatch_get_main_queue(), ^{
[color_filtered_view setImage:filtered_image];
});
祝你好运 今天我遇到了同样的问题,我相信这与setImage调用是从另一个线程调用有关。此代码适用于我:
dispatch_sync(dispatch_get_main_queue(), ^{
[color_filtered_view setImage:filtered_image];
});
祝你好运 谢谢你的回答,但这不是我的问题。谢谢你的回答,但这不是我的问题。