Ios 从Mat创建UIImage后OpenCV UIImageView setImage不工作

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

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

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];
});

祝你好运

谢谢你的回答,但这不是我的问题。谢谢你的回答,但这不是我的问题。