图片模糊度判断程序(C++opencv)

Posted 云计算和大数据收集

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图片模糊度判断程序(C++opencv)相关的知识,希望对你有一定的参考价值。

//#include<opencv2\opencv.hpp>
//using namespace cv;

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include "cv.h"

using namespace cv;
using namespace std;

double focus(IplImage* image);

int main()
{
    IplImage*previous1;
    IplImage*previous2;
    IplImage*previous3;
    IplImage*previous4;
    previous1 = cvLoadImage("D:/2222/1 (1).jpg", 1);
    previous2 = cvLoadImage("D:/2222/1 (2).jpg", 1);
    previous3 = cvLoadImage("D:/2222/1 (3).jpg", 1);
    previous4 = cvLoadImage("D:/2222/1 (4).jpg", 1);
    if (previous1 != 0 && previous2 != 0 && previous3 != 0 && previous4 != 0) {
        cvNamedWindow("previous1", 1);
        cvShowImage("previous1", previous1);
        cvNamedWindow("previous2", 1);
        cvShowImage("previous2", previous2);
        cvNamedWindow("previous3", 1);
        cvShowImage("previous3", previous3);
        cvNamedWindow("previous4", 1);
        cvShowImage("previous4", previous4);
        cout << "The definition of the previous1 is: " << focus(previous1) << endl;
        cout << "The definition of the previous2 is: " << focus(previous2) << endl;
        cout << "The definition of the previous3 is: " << focus(previous3) << endl;
        cout << "The definition of the previous4 is: " << focus(previous4) << endl;

        //关掉窗口,结束   cvWaitKey(0);  
        cvDestroyWindow("previous1");
        cvReleaseImage(&previous1);

        cvDestroyWindow("previous2");
        cvReleaseImage(&previous2);
        cvDestroyWindow("previous3");
        cvReleaseImage(&previous3);
        cvDestroyWindow("previous4");
        cvReleaseImage(&previous4);
        return 0;
    }
    return -1;


}
double focus(IplImage*image) {
    IplImage*picone = cvCreateImage(cvGetSize(image), 8, 3);
    cvCvtColor(image, picone, CV_BGR2YCrCb);
    CvScalar gety;
    double z = 0, zy1 = 0, zy2 = 0, total = 0;
    double gety1 = 0, gety2 = 0;
    double final = 0;
    for (int ix = 0; ix < (picone->height); ix++) {
        gety1 = 0;
        gety2 = 0;
        zy1 = 0;
        zy2 = 0;
        for (int jy = 0; jy < (picone->width); jy++) {
            gety = cvGet2D(picone, ix, jy);
            z = 0.5*gety.val[0] - gety1 + 0.5*gety2 + zy1 - 0.5*zy2;
            total = total + z;
            gety2 = gety1;
            gety1 = gety.val[0];
            zy2 = zy1;
            zy1 = z;
        }
    }
    cvReleaseImage(&picone);
    final = abs(total / ((image->height)*(image->width)));
    return final;
}

 

以上是关于图片模糊度判断程序(C++opencv)的主要内容,如果未能解决你的问题,请参考以下文章

图片相似度判断

c++ opencv 图像模糊度检测

OpenCV读取图片判断读取是否成功显示图片的代码(C++代码和Python代码)

使用Python,OpenCV进行平滑和模糊

matlab 模糊隶属度判断类别

请教怎么用opencv将一张模糊的图片变清晰