怎么从图片中提取线 python

import numpy as np
import matplotlib.pyplot as plt
import cv2
import pylab as mpl  # import matplotlib as mpl
from scipy.signal import savgol_filter
from signal_process.basic_signal_pro import normalize_fun
a = cv2.imread(r'.jpg')
a_red = a[:, :, 2]


def get_point_2(img):
    down = cv2.pyrDown(img)
    down = cv2.pyrDown(down)
    thresh, pic = cv2.threshold(down, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
    erode = cv2.erode(pic, kernel)
    dilate = cv2.dilate(erode, kernel)
    cor = np.where(dilate > 0)
    print(cor)
    # 图像坐标系(x,-y)转换到矩阵坐标系(row, col)
    arr_col = -cor[0]
    arr_row = cor[1]
    # plt.scatter(arr_row, arr_col)
    # 没有问题,执行下一步。观察scatter图像,发现图像较粗的原因是一个x对应多个y,那么就需要做x的删减操作
    # 也就是使一个arr_row对应一个arr_col,具体选第一个出现的

    # step_1: 以x坐标值做排序
    arr_new = np.c_[arr_row, arr_col]
    arr_sort = arr_new[np.argsort(arr_new[:, 0])]
    # arr_sort = np.sort(arr_new)
    # 打印一下
    # print(arr_sort[:, 0][0:100])    # 结果符合预期

    # step_2:同一个x对应下的y只要一个
    down_x = []
    down_y = []
    for i in range(1, len(arr_row)):
        if arr_sort[i, 0] != arr_sort[i-1, 0]:
            down_x.append(arr_sort[i, 0])
            down_y.append(arr_sort[i, 1])

    # 画一下线,可以,但是线条不好看
    # plt.plot(down_x, down_y)

    # 做一个平滑处理
    sav_y = savgol_filter(down_y, 15, 5)
    return sav_y
    # plt.plot(sav_y)
    # plt.show()

原图片长这样,看看有没有搞得更好

在这里插入图片描述我处理出来的
在这里插入图片描述

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
采用python,opencv开源库实现图片提取曲线数据 使用说明: openpic 可以选择采用自动采集测点数据或手动采集测点数据 操作过程:第一步裁剪,crop, 鼠标响应step_crop, 鼠标左键选裁剪的矩形区域,选后键盘n表示确认进入下一步骤; 无需裁剪时键盘o直接进入下一步骤;esc表示取消,退回到开始 第二步矫正,correction,鼠标响应step_correction, 鼠标左键点选梯形矫正的四个顶点, 键盘u左上,i右上,j左下,k右下,切换当前有效操作做的顶点, 键盘w up, s down, a left, d right 或上下左右键,微调鼠标选点位置,detail display放大显示当前选点的细节; 键盘t键操作矫正,n键表示确认矫正结果进入下一步骤,b键表示取消矫正重新选梯形顶点 第三步坐标系,coordinate,鼠标响应step_coordinate, 鼠标左键点选xy坐标系的原点、x轴最大刻度点、y轴最大刻度点。 xy轴的坐标刻度值由选择图片窗口的x、y最大最小值决定,xy轴必须原点处交汇但可以从非零开始分别计算刻度 键盘u y轴,j 坐标原点,k x轴,切换当前鼠标点选的有效点 键盘w up, s down, a left, d right 或上下左右键,微调鼠标选点位置,detail display放大显示当前选点的细节; 默认图片已经矫正,坐标系仅支持直角坐标系,在设置坐标系时原点可以任意移动,x轴y轴只能依据原点位置在直角轴上移动 键盘n表示确认坐标系设置结果进入下一步,b表示取消退回到上一步,esc退回到开始 第四步采集数据:手动采集manual_sample使用sample_points,鼠标响应step_sample_points,鼠标左键点选要采集的测点,键盘n表示确认选择开始选下一个点 键盘o表示选择完输出测点数据到csv文件。 键盘w up, s down, a left, d right 或上下左右键,微调鼠标选点位置,detail display放大显示当前选点的细节; 自动采集auto_sample使用tracecolor,鼠标响应step_color_picker。自动采集原理为先选择曲线,然后自动等间隔采集曲线上点 开始界面没有自动采集点数,在使用auto的函数调用时添加。 自动采集以tracecolor颜色提取构建曲线曲线点数据平滑,间隔重采样为主要工作过程。在图片存在同色非相关区域时,可采用颜色提取刷,手动确定曲线的有效范围 键盘l切换提取刷开关,提取刷功能开启时,鼠标右键按住滑动刷出有效的采集范围。 鼠标左键点选的位置作为提取颜色,同时具备单一颜色固定阈值提取曲线和多个颜色自动确定阈值范围的提取曲线两种模式。 键盘p选择鼠标位置的点颜色作为多个颜色参考提取,移动鼠标位置(或键盘移动)采用p键选择多个颜色点,确定提取阈值范围 键盘n表示完成颜色选择开始曲线提取,显示提取后黑白曲线图,键盘b取消提取退回上一步重新操作 esc取消退回到开始 键盘o表示接受曲线提取结果,开始自动间隔采集计算曲线上点,并输出csv文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值