我是靠谱客的博主 哭泣外套,最近开发中收集的这篇文章主要介绍【OpenCV】图像模糊检测,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在项目中的一个环节用到了模糊检测的相关内容

主要思想是先对原图像进行灰度化,然后用3x3的拉普拉斯算子进行滤波处理

再计算处理后图像的均值和方差,将方差当做模糊检测的阈值选定标准即可。

相关的程序如下所示:

#include <iostream>
#include <opencv2corecore.hpp>
#include <opencv2highguihighgui.hpp>
#include <opencv2imgprocimgproc.hpp>

using namespace cv;
using namespace std;

bool blurDetect(Mat srcImage);

int main()
{
	//读入图片
	Mat img1 = imread("white1_1.bmp");

	double time = (double)getTickCount();
	bool flag = blurDetect(img1);
	time = ((double)getTickCount() - time) / getTickFrequency();
	cout << "所用时间为:" << time << "s" << endl;
	system("pause");
	return 0;
}

//模糊检测,如果原图像是模糊图像,返回0,否则返回1
bool blurDetect(Mat srcImage)
{

	Mat gray1;
	if (srcImage.channels() != 1)
	{
		//进行灰度化
		cvtColor(srcImage, gray1, CV_RGB2GRAY);
	}
	else
	{
		gray1 = srcImage.clone();
	}
	Mat tmp_m1, tmp_sd1;	//用来存储均值和方差
	double m1 = 0, sd1 = 0;
	//使用3x3的Laplacian算子卷积滤波
	Laplacian(gray1, gray1, CV_16S, 3);
	//归到0~255
	convertScaleAbs(gray1, gray1);
	//计算均值和方差
	meanStdDev(gray1, tmp_m1, tmp_sd1);
	m1 = tmp_m1.at<double>(0, 0);		//均值
	sd1 = tmp_sd1.at<double>(0, 0);		//标准差
	//cout << "原图像:" << endl;
	cout << "均值: " << m1 << " , 方差: " << sd1*sd1 << endl;
	if (sd1*sd1 < 400)
	{
		cout << "原图像是模糊图像" << endl;
		return 0;
	}
	else
	{
		cout << "原图像是清晰图像" << endl;
		return 1; 
	}
}


最后

以上就是哭泣外套为你收集整理的【OpenCV】图像模糊检测的全部内容,希望文章能够帮你解决【OpenCV】图像模糊检测所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部