Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 基于AVFoundation的图像模糊检测_Ios_Objective C_Iphone_Opencv - Fatal编程技术网

Ios 基于AVFoundation的图像模糊检测

Ios 基于AVFoundation的图像模糊检测,ios,objective-c,iphone,opencv,Ios,Objective C,Iphone,Opencv,您好,我已使用AVFoundation拍摄图像,无法检测模糊图像 我在以下链接中尝试了建议的解决方案: 但它只适用于使用默认cameraPicker拍摄的图像 使用: cv::Mat finalImage; cv::Mat matImage=[self-convertUIImageToCVMat:image]; cv::灰色; cv::CVT颜色(matImage、matImageGrey、cv_RGBA2GRAY); matImage.release(); cv::Mat newEX; 常量整

您好,我已使用AVFoundation拍摄图像,无法检测模糊图像

我在以下链接中尝试了建议的解决方案: 但它只适用于使用默认cameraPicker拍摄的图像

使用:

cv::Mat finalImage;
cv::Mat matImage=[self-convertUIImageToCVMat:image];
cv::灰色;
cv::CVT颜色(matImage、matImageGrey、cv_RGBA2GRAY);
matImage.release();
cv::Mat newEX;
常量整数中值\u模糊\u过滤器\u大小=15;//奇数
cv::medianBlur(MatimageGray、newEX、中值模糊、过滤器大小);
matImageGrey.release();
cv::Mat-Laplacian图像;
cv::拉普拉斯(newEX,拉普拉斯图像,cv_8U);//CV_8U
newEX.release();
cv::Mat-laplacianImage8bit;
laplacianImage.convertTo(laplacianImage8bit,CV_8UC1);
laplacianImage.release();
cv::CVT颜色(拉普拉斯图像8比特,最终图像,cv_GRAY2BGRA);
int rows=finalImage.rows;
int cols=finalImage.cols;
int maxLap=-16777216;
无符号字符*像素=laplacianImage8bit.data;
对于(int i=0;i<(laplacianImage8bit.elemSize()*laplacianImage8bit.total());i++){
if(像素[i]>maxLap){
maxLap=像素[i];
}
}
像素=零;
finalImage.release();

BOOL isBlur=(maxLapiOS现在支持金属性能着色器,它可以为您实现这一点。有一个着色器字面上称为MPSImageLaplacian,还有另一个称为MPSimageStatisticsMeansandVariance。依次应用,您就得到了“Laplacian方差”:。有关如何执行此操作的详细信息,请参阅:

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