我想尝试一个简单的OpenCV示例,如下所示:

Mat greyMat;
cvtColor(image, greyMat, CV_BGR2GRAY);
filtered_image = [self UIImageFromCVMat:greyMat];
[color_filtered_view setImage:filtered_image];

如果图像只是另一个Mat(从相机获取),则按下按钮即可执行。

不幸的是,绝对没有任何反应。图像 View 保持空白。

setNeedsLayout和setNeedsDisplay没有帮助,但是如果我旋转设备(并强制布局适应其他方向),则图像会突然可见。

怎么了?

更新:

发现出现此问题仅是因为CvVideoCamera正在流式传输到另一个 View ,因此不是由于Mat到UIImage的转换。问题是,为什么/如何(正在运行CvVideoCamera)阻止setImage?

最佳答案

今天,我遇到了同样的问题,我相信与setImage调用是从另一个线程调用这一事实有关的。该代码对我有用:

dispatch_sync(dispatch_get_main_queue(), ^{
   [color_filtered_view setImage:filtered_image];
});

祝好运!

关于ios - 从Mat创建UIImage后,OpenCV UIImageView setImage不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16575223/

10-12 21:01