我正在尝试使用OpenCV for iOS裁剪来自视频流的图像。我不是想做任何花哨的事情,只需裁剪图像,然后显示它。我试过了this和this,似乎对我都不起作用。作为委托方法,我得到了传入的当前cv :: Mat图像,所以我需要的是创建裁剪效果的代码。
如果需要,我可以做一些像this这样复杂的事情,但我只需要一个矩形裁剪,所以我认为有一种更简单的方法。我只是不明白为什么设置投资回报率对我不起作用!
cv::Rect myROI(10, 10, 100, 100);
cv::Mat croppedImage = src(myROI);
src.copyTo(croppedImage);
[displayView setImage:[UIImage imageWithCVMat:src]];
^^^无法正常工作,只显示原始图像
答案 0 :(得分:22)
代码中的问题是,通过复制src图像,您可以将整个图像复制到裁剪后的图像。 有两种可能性:
1 - 无需复制数据。和你一样。但没有第二步。在这种情况下,croppedImage不是真正的副本,它指向在src。:
中分配的数据cv::Mat croppedImage = src(myRoi);
2 - 复制数据。
cv::Mat croppedImage;
cv::Mat(src, myRoi).copyTo(croppedImage)
(一行方法 - cv::Mat croppedImage = cv::Mat(src, myRoi).clone();
)