• 检测轮廓 获取其最值的坐标 opencvpython


    一、基础知识

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

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

  • 相关阅读:
    crontab机会任务监控
    Python 模块的一般处理
    MySQLdb autocommit
    MySQLdb callproc 方法
    Pthon MySQLdb 的安装
    CentOS7安装MySQL
    Linux中的网络
    Linux中的盘符问题
    类比的方法学习Performance_schema
    MySQL 设置数据库的隔离级别
  • 原文地址:https://www.cnblogs.com/qev211/p/16491311.html
Copyright © 2020-2023  润新知