2条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
要识别图片中的竹竿及其长度,我们可以采用计算机视觉技术,主要步骤包括图像预处理、边缘检测、直线检测(使用霍夫变换),然后计算这些直线的长度。以下是详细的Python实现过程,使用OpenCV库。
首先,确保安装了必要的库:
pip install opencv-python-headless numpy接下来是具体代码实现:
import cv2 import numpy as np # 读取图片 image_path = "https://hoire.oss-cn-shenzhen.aliyuncs.com/313254_638543018974147470.jpg" img = cv2.imread(image_path) # 转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 图像预处理:高斯模糊去噪 blurred = cv2.GaussianBlur(gray, (5, 5), 0) # 边缘检测:Canny边缘检测 edges = cv2.Canny(blurred, 50, 150) # 霍夫变换检测直线 lines = cv2.HoughLinesP(edges, 1, np.pi / 180, threshold=100, minLineLength=100, maxLineGap=10) # 如果检测到直线,则计算并绘制 if lines is not None: for line in lines: x1, y1, x2, y2 = line[0] length = np.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) print(f"Line Length: {length:.2f}") # 绘制检测到的直线 cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2) # 显示结果 cv2.imshow("Detected Lines", img) cv2.waitKey(0) cv2.destroyAllWindows()注意:
- 这段代码将从给定的URL下载图片并处理。确保网络连接正常。
cv2.HoughLinesP函数用于概率霍夫变换,它能检测出线段而不是无限长的直线,更适合实际应用。minLineLength和maxLineGap参数用于过滤掉短小的线段和断开的线段,可以根据实际情况调整。- 线段长度通过欧几里得距离计算得出。
以上代码提供了一个基本框架,实际应用中可能需要根据具体图像调整参数,比如模糊程度、Canny检测的阈值等,以提高识别精度。
解决 无用评论 打赏 举报 编辑记录