您好我使用AVFoundation捕获图像,无法检测模糊图像。
我在以下链接中尝试了建议的解决方案: OpenCV with Laplacian formula to detect image is blur or not in iOS但它仅适用于使用默认cameraPicker捕获的图像。
用于:
cv::Mat finalImage;
cv::Mat matImage = [self convertUIImageToCVMat:image];
cv::Mat matImageGrey;
cv::cvtColor(matImage, matImageGrey, CV_RGBA2GRAY);
matImage.release();
cv::Mat newEX;
const int MEDIAN_BLUR_FILTER_SIZE = 15; // odd number
cv::medianBlur(matImageGrey, newEX, MEDIAN_BLUR_FILTER_SIZE);
matImageGrey.release();
cv::Mat laplacianImage;
cv::Laplacian(newEX, laplacianImage, CV_8U); // CV_8U
newEX.release();
cv::Mat laplacianImage8bit;
laplacianImage.convertTo(laplacianImage8bit, CV_8UC1);
laplacianImage.release();
cv::cvtColor(laplacianImage8bit,finalImage,CV_GRAY2BGRA);
int rows = finalImage.rows;
int cols= finalImage.cols;
int maxLap = -16777216;
unsigned char *pixels = laplacianImage8bit.data;
for (int i = 0; i < (laplacianImage8bit.elemSize()*laplacianImage8bit.total()); i++) {
if (pixels[i] > maxLap) {
maxLap = pixels[i];
}
}
pixels=NULL;
finalImage.release();
BOOL isBlur = (maxLap <= kBlurThreshhold)? YES : NO;
NSLog(@"Max: %d, Cols: %d, Rows: %d", maxLap, cols, rows);
请注意我必须在 1500 X 1500 res中调整图像大小。在根据要求对其应用模糊检测之前。一个有用的解决方案将不胜感激。
感谢。
答案 0 :(得分:0)
iOS现在支持Metal Performance Shaders,它可以为您完成此任务。有一个着色器,字面名称为MPSImageLaplacian,然后为另一个着色器,名称为MPSImageStatisticsMeanAndVariance。一个接一个地应用,您便拥有了“拉普拉斯变异” :)。有关如何执行此操作的详细信息,请参见:https://medium.com/@salqadri/blur-detection-via-metal-on-ios-16dd02cb1558