具有拉普拉斯公式的OpenCV用于检测图像在iOS中是否模糊

Nik*_*dav 7 opencv image-processing image-recognition ios

提前感谢您的帮助.

我有很多研发和搜索,但我找不到任何检测模糊图像的解决方案.

我使用过这个https://github.com/BloodAxe/OpenCV-Tutorial并使用拉普拉斯公式进行模糊检测,但无法在图像中获得模糊检测

- (void)checkForBurryImage:(UIImage*)image {

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"); }
Run Code Online (Sandbox Code Playgroud)

我使用相同的代码作为Android和它的工作正常,但在iOS,它给我总是积极的价值所以我认为它不起作用,

所以请给我想法或链接或任何建议.

Nik*_*rni 5

用这个 :

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)


met*_*urg 0

尝试有没有办法检测图像是否模糊?

并阅读此内容:http ://www.cs.cmu.edu/~htong/pdf/ICME04_tong.pdf 。

基本上,如果图像中高频成分不多,它就会变得模糊。