#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;
}
OpenCV相机自动对焦代码整理
于 2023-03-08 16:25:25 首次发布