ToB企服应用市场:ToB评测及商务社交产业平台

标题: OpenCV提取十字标中心点的几种思路 [打印本页]

作者: 科技颠覆者    时间: 2022-6-25 20:53
标题: OpenCV提取十字标中心点的几种思路
1. 取边界拟合四线交点取中

这个是个人感觉自由度最大的,应该也是可以达到的精度上限最高的,也支持图像的旋转,如果筛选直线的方法得当对于线的相交角度也没特殊要求,但是手动计算量也较大;本人实现的取四条直线的方法具有局限性,这里只写思路
优势:即使只识别到两条最大不相似直线(例如求十字中心,最长且接近垂直的两条线一定是符合需求的)也可以计算出来一个附近值,偏差大致为线宽/2(假设十字线等宽)
坑处:如果需要低画质高精度,基本达不到,摄像头像素变化严重,边界也会波动,部分直线斜率一直波动
2. 边界像素直方图取四点取中

使用OpenCV自带的库整个流程计算较快,较为简单
优点:流程简单、计算速度快
缺点:不支持旋转,只支持横向纵向交叉,如果目标太窄、边界毛糙容易有较大误差
3. 图像自动阈值二值化拟合四直线取交点取中

优点:支持旋转等
缺点:筛选直线能气死,不过自适应阈值得到的图片进行拟合直线要比直接灰度图提取边界拟合要规整
4. 图像自动阈值二值化像素直方图最大取四点取中

优点:流程简单、计算速度快
缺点:不支持旋转,只支持横向纵向交叉
5. HSV过滤颜色掩膜

6. 这里给出2、4的示例代码

[code]from ast import mainimport cv2 as cvimport osimport numpy as npimport matplotlib.pyplot as plt# 获取文件夹下所有文件def get_file_list(path):    file_list = []    for root, dirs, files in os.walk(path):        for file in files:            file_list.append(os.path.join(root, file))    return file_listdef remove_contours(img,area):    contours, _ = cv.findContours(img, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)    n = len(contours)  # 轮廓的个数    cv_contours = []    for contour in contours:        area = cv.contourArea(contour)        if area




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4