opencv中图像失焦检测
2017-04-04 21:13
197 查看
失焦的图片和对焦准确的图片最大的区别就是正常图片轮廓明显,而失焦图片几乎没有较大像素值之间的变化
对图像的横向,以及纵向,分别做差分,累计差分可以用来作为判断是否失焦的参考
两个函数,一个简单粗暴直接根据差分值判断是否失焦,适合确定样本类型的情况,另外一种,需要进一步判断
对图像的横向,以及纵向,分别做差分,累计差分可以用来作为判断是否失焦的参考
两个函数,一个简单粗暴直接根据差分值判断是否失焦,适合确定样本类型的情况,另外一种,需要进一步判断
//简单设定阈值判断是否失焦 bool focusDetect(Mat& img){ clock_t start, end; start = clock(); int diff = 0; int diff_thre = 20; int diff_sum_thre = 1000; for (int i = img.rows / 10; i < img.rows; i += img.rows / 10){ uchar* ptrow = img.ptr<uchar>(i); for (int j = 0; j < img.cols - 1; j++){ if (abs(ptrow[j + 1] - ptrow[j])>diff_thre) diff += abs(ptrow[j + 1] - ptrow[j]); } cout << diff << endl; } end = clock(); cout << "time=" << end - start << endl; bool res = true; if (diff < diff_sum_thre) { cout << "the focus might be wrong!" << endl; res = false; } return res; } //返回一个与焦距是否对焦成功的一个比例因子 double focus_measure_GRAT(Mat Image) { double threshold = 0; double temp = 0; double totalsum = 0; int totalnum = 0; for (int i=0; i<Image.rows; i++) { uchar* Image_ptr = Image.ptr<uchar>(i); uchar* Image_ptr_1 = Image.ptr<uchar>(i+1); for (int j=0; j<Image.cols; j++) { temp = max(abs(Image_ptr_1[j]-Image_ptr[j]), abs(Image_ptr[j+1]-Image_ptr[j])); totalsum += temp; totalnum += 1; } } double FM = totalsum/totalnum; return FM; }
相关文章推荐
- 【OpenCV3图像处理】图像特征点检测
- OpenCV图像处理篇之边缘检测算子
- OpenCV -- 特征点检测与图像匹配
- OPENCV的学习:图像特征检测之Harris角点算法
- 图像边缘检测--OpenCV之cvCanny函数
- OpenCV特征点检测匹配图像-----添加包围盒
- 检测图像失焦、偏色、亮度异常
- opencv 图像阴影检测
- android openCV检测图像的基本特征,包括Canny边缘检测、Harris角点检测、霍夫直线检测-基于Android studio
- 使用Python和OpenCV检测图像中的物体并将物体裁剪下来
- OpenCV图像处理篇之边缘检测算子
- OpenCV检测图像SURF特征
- opencv2反投影直方图以检测特定的图像内容
- opencv3_java 图像的边缘检测Canny Canny
- Canny边缘检测源码与图像结果(OpenCV2.0)
- 用OpenCV检测图像中的长方形画布或纸张并提取图像内容
- 基于OpenCV的图像模糊与否检测
- OpenCV关于视频处理的学习(VideoCapture类)-在检测中一些必要的图像操作
- OpenCV 用dnn深度学习模块检测图像
- 图像边缘检测--OpenCV之cvCanny函数