一、基础知识
图像清晰度评价算法有多种
空域中,主要考察图像的邻域对比度,即相邻像素间灰度特征的 梯度差;
频域中,主要考察图像的频率分量,清晰的图像高频分量多,模糊的图像低频分量多。
灰度值
把白色与黑色之间按对数关系分成若干级,称为“灰度等级”。范围一般从0到255,白色为255,黑色为0
物体的边缘呈现灰度的不连续性,图像分割就是基于这个原理
图像滤波
平滑图像,达到降低图像噪音的效果(平滑空间滤波)
锐化图像,突出灰度的过渡部分(锐化空间滤波)
Sobel(索贝尔)算子
主要用于获得数字图像的一阶梯度,常用于边缘检测。
它根据 图像中每个像素的上下左右四邻域的灰度值加权差,在边缘处达到极值从而检测边缘。
Sobel 算子有两个,一个是检测水平边缘的 ;另一个是检测垂直边缘的 。
二、检测十字边界
目标:获取图片中最左边与最上边的坐标值
im = cv2.imread(image_path)
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
imgray_gauss = cv2.GaussianBlur(imgray, (3, 3), 0) # 高斯滤波
canny = cv2.Canny(imgray_gauss, 50, 100)
# 返回值 第一个是图像 第二个是轮廓,第三个是(轮廓的)层析结构 轮廓(第二个返回值)是一个 Python列表,其中存储这图像中的所有轮廓。每一个轮廓都是一个 Numpy 数组,包含对象边界点( x, y)的坐标
contours, hierarchy = cv2.findContours(canny, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
x_min = 10000
y_min = 10000
for i_array in contours:
min_tuple = (int(i_array.min(0)[0][0]), int(i_array.min(0)[0][1]))
if x_min > min_tuple[0]:
x_min = min_tuple[0]
if y_min > min_tuple[1]:
y_min = min_tuple[1]
min_tuple_use = (x_min, y_min) # x、y的最小值
return min_tuple_use
参考:
https://zhuanlan.zhihu.com/p/38739563
https://blog.csdn.net/czdsdhryes/article/details/104134491
https://blog.csdn.net/HuangZhang_123/article/details/80511270