我在opencv委托方法processImage
中调用setImage函数时遇到问题。当我在setImage
中调用viewDidLoad
时,我可以看到图像,但是当我在processImage
中进行相同操作时,它不起作用。
这里是什么问题?
- (void)viewDidLoad
{
[super viewDidLoad];
// This works !
[processImageView setImage:[UIImage imageNamed:@"resistor3.jpg"]];
}
- (void)processImage:(cv::Mat&)img {
// This does not work anymore !
[processImageView setImage:[UIImage imageNamed:@"resistor3.jpg"]];
}
当您修改UI时,您必须在主线程中进行操作,很有可能在另一个线程上调用了委托方法(如果正在调用它)。试试这个。
- (void)processImage:(cv::Mat&)img {
dispatch_async(dispatch_get_main_queue(), ^{
[processImageView setImage:[UIImage imageNamed:@"resistor3.jpg"]];
// I also think you should use the dot syntax, but that's purely a style thing
// processImageView.image = [UIImage imageNamed:@"resistor3.jpg"];
});
}
编辑:添加有关使用点语法的建议