Nik*_*dav 7 opencv image-processing image-recognition ios
提前感谢您的帮助.
我有很多研发和搜索,但我找不到任何检测模糊图像的解决方案.
我使用过这个https://github.com/BloodAxe/OpenCV-Tutorial并使用拉普拉斯公式进行模糊检测,但无法在图像中获得模糊检测
- (void)checkForBurryImage:(UIImage*)image {
Run Code Online (Sandbox Code Playgroud)cv::Mat matImage = [image toMat]; cv::Mat matImageGrey; cv::cvtColor(matImage, matImageGrey, CV_BGRA2GRAY); cv::Mat dst2 =[image toMat]; cv::Mat laplacianImage; dst2.convertTo(laplacianImage, CV_8UC1); cv::Laplacian(matImageGrey, laplacianImage, CV_8U); cv::Mat laplacianImage8bit; laplacianImage.convertTo(laplacianImage8bit, CV_8UC1); //------------------------------------------------------------- //------------------------------------------------------------- unsigned char *pixels = laplacianImage8bit.data; //------------------------------------------------------------- //------------------------------------------------------------- // unsigned char *pixels = laplacianImage8bit.data; int maxLap = -16777216; for (int i = 0; i < ( laplacianImage8bit.elemSize()*laplacianImage8bit.total()); i++) { if (pixels[i] > maxLap) maxLap = pixels[i]; } int soglia = -6118750; printf("\n maxLap : %i",maxLap); if (maxLap < soglia || maxLap == soglia) { printf("\n\n***** blur image *****"); }else printf("\nNOT a blur image"); }
我使用相同的代码作为Android和它的工作正常,但在iOS,它给我总是积极的价值所以我认为它不起作用,
所以请给我想法或链接或任何建议.
用这个 :
Laplacian(gray, laplacianImage, CV_64F);
Scalar mean, stddev; // 0:1st channel, 1:2nd channel and 2:3rd channel
meanStdDev(laplacianImage, mean, stddev, Mat());
double variance = stddev.val[0] * stddev.val[0];
double threshold = 2900;
if (variance <= threshold) {
// Blurry
} else {
// Not blurry
}
Run Code Online (Sandbox Code Playgroud)