一、基础知识

图像清晰度评价算法有多种
空域中,主要考察图像的邻域对比度,即相邻像素间灰度特征的 梯度差;
频域中,主要考察图像的频率分量,清晰的图像高频分量多,模糊的图像低频分量多。

灰度值
把白色与黑色之间按对数关系分成若干级,称为“灰度等级”。范围一般从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