OpenCV相机自动对焦代码整理

该代码段展示了如何使用OpenCV库对图像进行处理,根据传入的参数选择不同的对焦方法,包括Sobel算子、Laplacian算子以及计算灰度图像的标准差来评估图像的清晰度。处理后,显示带有平均值信息的图像并返回该值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <highgui/highgui.hpp>
#include <imgproc/imgproc.hpp>
#include <opencv2/imgproc/types_c.h>
#include <fstream>

using namespace std;
using namespace cv;


//imgFile   图片地址,可更改为图片内存
//nSelectCamFocus  选择对焦的方法,有三种 0 1 2
double FuncImg(char *imgFile,int nSelectCamFocus)
{
	double dMeanValue = 0;
	//判断文件是否存在
	ifstream f(imgFile);
	if(f.good())
	{
		Mat imageSource = imread(imgFile);
		//判断图片读取是否成功
		if (!imageSource.empty())
		{
			Mat imageGrey;

			cvtColor(imageSource, imageGrey, CV_RGB2GRAY);
			//自动对焦方式选择
			if (0 == nSelectCamFocus)
			{
				Mat imageSobel;
				Sobel(imageGrey, imageSobel, CV_16U, 1, 1);

				//图像的平均灰度
				double meanValue = 0.0;
				meanValue = mean(imageSobel)[0];

				//double to string
				stringstream meanValueStream;
				string meanValueString;
				meanValueStream << meanValue;
				meanValueStream >> meanValueString;
				meanValueString = "Articulation(Sobel Method):" + meanValueString;
				putText(imageSource, meanValueString, Point(2, 50), FONT_HERSHEY_COMPLEX, 0.8, Scalar(255, 255, 25), 2);
				imshow("Articulation", imageSource);
				dMeanValue = meanValue;
			}
			else if (1 == nSelectCamFocus)
			{
				Mat imageSobel;

				Laplacian(imageGrey, imageSobel, CV_16U);
				//Sobel(imageGrey, imageSobel, CV_16U, 1, 1);

				//图像的平均灰度
				double meanValue = 0.0;
				meanValue = mean(imageSobel)[0];

				//double to string
				stringstream meanValueStream;
				string meanValueString;
				meanValueStream << meanValue;
				meanValueStream >> meanValueString;
				meanValueString = "Articulation(Laplacian Method): " + meanValueString;
				putText(imageSource, meanValueString, Point(20, 50), FONT_HERSHEY_COMPLEX, 0.8, Scalar(255, 255, 25), 2);
				imshow("Articulation", imageSource);
				dMeanValue = meanValue;
			}
			else
			{
				Mat meanValueImage;
				Mat meanStdValueImage;

				//求灰度图像的标准差
				meanStdDev(imageGrey, meanValueImage, meanStdValueImage);
				double meanValue = 0.0;
				meanValue = meanStdValueImage.at<double>(0, 0);

				//double to string
				stringstream meanValueStream;
				string meanValueString;
				meanValueStream << meanValue * meanValue;
				meanValueStream >> meanValueString;
				meanValueString = "Articulation(Variance Method): " + meanValueString;

				putText(imageSource, meanValueString, Point(20, 50), FONT_HERSHEY_COMPLEX, 0.8, Scalar(255, 255, 25), 2);
				imshow("Articulation", imageSource);
				dMeanValue = meanValue * meanValue;
			}
		}
	}
	return dMeanValue;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值