首页 > 其他分享 >上位机图像处理和嵌入式模块部署(qmacvisual图像清晰度)

上位机图像处理和嵌入式模块部署(qmacvisual图像清晰度)

时间:2024-04-03 16:32:27浏览次数:22  
标签:src mat Laplacian 嵌入式 算法 图像处理 qmacvisual 清晰度 cv

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        做过isp的同学都知道,图像处理里面有一个3A,即自动曝光、自动白平衡和自动对焦。其中自动对焦这个,就需要用输入的图像清晰度作为反馈,自动调整摄像头的焦距。这也是摄像头中唯一需要机械控制的部分。那怎么判断图像的清晰度,这里面每个厂家都有自己的算法。今天我们学习的qmacvisual软件里面就自带了三个算法。

1、创建工程、创建流程

        工程和流程是qmacvisual软件使用的第一步。

2、导入图像清晰度插件

        图像清晰度插件,它的位置位于【检测识别】下面。直接拖过来就可以使用。

        整个插件中有两个地方需要配置。第一个是文件夹下面,也就是说需要从文件夹下面挑选出清晰度最高的那张图片。整个文件夹大约100多张图片,如果大家跟进去看的话,就会发现图片是从模糊到清晰、再到模糊的状态。第二个是相关算法的配置,目前有三个算法供选择,分别是Tenengrad算法、Laplacian算法和SMD算法。选择好之后,单击执行按钮,就会看到清晰度最高的那个算法。此外,还可以看出当前图片这个特征的最优值是多少。

3、算法实现原理

        实现上面,三个算法我们都可以找到对应的实现代码过程。不失一般性,我们找到其中Laplacian梯度的实现过程,

//使用Laplacian梯度法计算一幅图像的清晰度
double frmImageClarity::CalcClarityLaplacian(const cv::Mat src_mat)
{
	try
	{
		cv::Mat gray;
		if (src_mat.channels() == 3)
		{
			cv::cvtColor(src_mat, gray, cv::COLOR_BGR2GRAY);
		}
		else if (src_mat.channels() == 4)
		{
			cv::cvtColor(src_mat, gray, cv::COLOR_RGBA2GRAY);
		}
		else
		{
			src_mat.copyTo(gray);
		}
		cv::Mat imageLaplacian;
		cv::Laplacian(gray, imageLaplacian, CV_16U);
		//图像的平均灰度
		double meanValue = 0.0;
		meanValue = cv::mean(imageLaplacian)[0];
		return meanValue;
	}
	catch (...)
	{
		return -1;
	}
}

        整个过程实现还是比较简单的,基本就三个步骤,第一步灰度转换;第二步Laplacian转换;第三步求解平均灰度。计算下来,就是哪张图片的灰度最高,就是哪张图片最清晰。有兴趣的同学,可以再去看看其他两种方法的实现过程。对于拍照不是很好,或者有抖动的图片来说,这种方法还是非常实用的。

4、其他两种算法的效果

        我们看一下除了Tenengrad算法之外,另外两种算法的执行效果是什么样的。需要注意的是,不同的算法判断标准是不一样的,所以左上角输出的数值可能是不一样的。

标签:src,mat,Laplacian,嵌入式,算法,图像处理,qmacvisual,清晰度,cv
From: https://blog.csdn.net/feixiaoxing/article/details/137323968

相关文章

  • 上位机图像处理和嵌入式模块部署(qmacvisual亮度检测)
    【 声明:版权所有,欢迎转载,请勿用于商业用途。联系信箱:[email protected]】    前面我们说过,在机器视觉当中,对于光源的处理要非常小心。这里面不仅包括了选择什么样的光源,还取决于怎样使用这些光源。通常情况下,静止的场景,一般都是手工调节光源之后,不再修改;但是对......
  • 嵌入式算法开发系列之卡尔曼滤波算法
    卡尔曼滤波算法文章目录卡尔曼滤波算法前言一、卡尔曼滤波算法原理二、算法应用三、C语言实现总结前言在嵌入式系统中,传感器数据通常受到噪声、误差和不确定性的影响,因此需要一种有效的方法来估计系统的状态。卡尔曼滤波算法是一种基于概率理论的优雅而高效的状态......
  • 嵌入式算法开发系列之离散傅里叶变换算法
    嵌入式算法开发系列之离散傅里叶变换算法文章目录嵌入式算法开发系列之离散傅里叶变换算法前言一、离散傅里叶变换原理二、算法应用三、C语言实现示例总结前言在嵌入式系统中,离散傅里叶变换(DiscreteFourierTransform,DFT)是一种常见且重要的信号处理技术,用于将时......
  • 【STM32嵌入式系统设计与开发】——16InputCapture(输入捕获应用)
    这里写目录标题STM32资料包:百度网盘下载链接:链接:https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd=8888提取码:8888一、任务描述二、任务实施1、工程文件夹创建2、函数编辑(1)主函数编辑(2)USART1初始化函数(usart1_init())(3)USART数据发送函数(USART1_Send_Data())(4)USART......
  • 嵌入式案例
                      ......
  • 几种嵌入式中常见的滤波算法
    在嵌入式系统开发中,滤波算法是不可或缺的一部分,用于从带有噪声的数据中提取有用信息,提高数据质量,并减少错误决策的可能性。下面将介绍几种在嵌入式系统中常见的滤波算法。1.移动平均滤波(MovingAverageFilter)移动平均滤波是一种简单的滤波算法,通过计算一定窗口内数据点的平......
  • 嵌入式工程师常用的几种算法
    嵌入式工程师常用的几种算法嵌入式系统在现代电子设备中无处不在,从简单的家电到复杂的工业控制系统,都离不开嵌入式技术的支持。作为嵌入式工程师,掌握一些常用的算法对于提高系统性能和优化资源利用至关重要。本文将介绍几种嵌入式工程师常用的算法。1.排序算法排序算法在嵌......
  • 【嵌入式智能产品开发实战】(十四)—— 政安晨:通过ARM-Linux掌握基本技能【链接静态库与
    目录链接静态库动态链接与地址无关的代码全局偏移表延迟绑定共享库政安晨的个人主页:政安晨欢迎 ......
  • Linux基础学习详细版(嵌入式开发必学)
    一、Linux简介什么是Linux?Linux就是跟平时大家接触的Windows操作系统软件一样,Linux也是一个操作系统软件,Linux跟Windows不同之处在于,Linux是一套开放源代码程序的、可以自由传播的类Unix操作系统软件。什么是开源?开源就是开放源代码,指的是将Linux系统的源代码公开,允许任......
  • 嵌入式学习Day4
    一、输入一个数判断是否回数代码:运行结果:二、输入一个数判断是否完美数代码:运行结果:三、图形打印打印以下两个图形  *       **** **       *** ***        ******         *代码:运行结果......