如何使用PyDIP获取视频中斑点(Blob)的位置与尺寸参数?
解决方法
diplib的dip.MeasurementTool.Measure方法默认仅返回基础尺寸类特征,你需要手动指定要测量的特征参数,增加位置特征Center即可获取斑点中心坐标。同时你原代码存在变量名拼写错误也会导致输出异常,修正后的代码如下:
import diplib as dip from matplotlib import pyplot as plt # 读取视频 vid = dip.ImageReadICS(r'C:\Users\mrtij\.spyder-py3\20211123_152822_capture.ics') vid = vid[0:-1, 0:-1, 325:3149] smvid = dip.Gauss(vid, [2,2,0]) # 可初始化存储容器,后续逐帧存所有斑点结果 blob_records = [] for i in range(1000, 1001): img = smvid[0:-1, 0:-1, i] imgmask = dip.IsodataThreshold(img) imgmask = dip.Label(imgmask) # 指定需要测量的特征:Size对应斑点尺寸,Center对应斑点中心坐标 measurement = dip.MeasurementTool.Measure(imgmask, img, ['Size', 'Center']) # 输出当前帧所有测量结果 print(measurement) # 遍历当前帧每个斑点提取数据,方便后续存储 for blob_id in measurement.Objects(): size = measurement[blob_id]['Size'][0] center_x, center_y = measurement[blob_id]['Center'] blob_records.append({ 'frame_id': i, 'blob_id': blob_id, 'center_x': center_x, 'center_y': center_y, 'size': size })
说明
Center默认返回亚像素级精度的坐标,如果需要整数像素坐标直接对返回值做取整处理即可- 所有帧处理完成后,可直接将
blob_records导出为csv、json等格式做后续分析
内容的提问来源于stack exchange,提问作者Tijmen Boereboom
相关产品推荐
相关产品推荐

