模糊度:
将灰度图像转化为拉普拉斯图像,然后进行归一化,并求取图像的拉普拉斯方差,方差越小图像越模糊
// 如果模糊度大于阈值,则图片清晰返回true,否则判定为模糊返回false
bool checkMotionBlur(cv::Mat image, float threshold = 150){
cv::Mat image_gray;
if (image.channels() == 3){
cv::cvtColor(image,image_gray,cv::COLOR_BGR2GRAY);
} else {
image.copyTo(image_gray);
}
// 拉普拉斯变换
// 使用拉普拉斯算子进行锐化
cv::Mat laplacian_image;
cv::Laplacian(image_gray, laplacian_image, CV_64F);
// 归一化处理
cv::Mat dst;
cv::convertScaleAbs(laplacian_image, dst);
// 求取方差 fm
cv::Scalar mean, stddev;
cv::meanStdDev(dst,mean,stddev);
double fm = stddev.val[0] * stddev.val[0];
bool flag = true;
if (fm < threshold)
flag = false;
return flag;
}
曝光:
直接计算灰度图像的明暗占比,如果明亮占比和黑暗占比太高,要么过曝要么过暗
// 曝光正常返回ture&#x