如何在图像中选择圆形区域并计算该区域的均值、标准差?
提取图像中间区域并计算统计量的实现方法
核心思路
通过确定中间区域的边界,利用numpy切片截取目标区域,再针对该区域计算均值、标准差等统计值,替代原代码中对整幅图像的计算。
具体实现步骤与修改后的代码
在你现有代码的test = cv2.divide((brut_grayscale-init_grayscale),(init_grayscale))之后,添加以下代码来提取中间区域并完成统计计算:
# 提取中间区域(示例:裁剪掉四周10%的区域,取中间80%范围) h, w = test.shape # 可根据需求调整裁剪比例,比如改为0.2就是四周各裁20% crop_ratio = 0.1 start_row = int(h * crop_ratio) end_row = int(h * (1 - crop_ratio)) start_col = int(w * crop_ratio) end_col = int(w * (1 - crop_ratio)) # 用numpy切片截取中间区域 middle_region = test[start_row:end_row, start_col:end_col] # 基于中间区域计算Irms、均值、标准差等统计值 intensite_rms = np.sqrt(np.mean(np.square(middle_region))) print("Intensité RMS de la zone centrale :", intensite_rms) mean, std_dev = cv2.meanStdDev(middle_region) print("ecart type de la zone centrale :", std_dev[0][0]) print("Moyenne de la zone centrale :", mean[0][0]) print("variance de la zone centrale :", std_dev[0][0]**2) # 可选:可视化中间区域 plt.imshow((middle_region * 65535), cmap='gray') plt.title("Zone centrale de l'image traitée") plt.show()
可选:固定大小的中间区域提取
如果需要提取固定尺寸的中间区域(比如中间600×600),可以替换上述区域提取代码为:
h, w = test.shape center_h, center_w = h // 2, w // 2 # 设置中间区域的半高和半宽,可按需调整 half_h, half_w = 300, 300 # 防止超出图像边界 start_row = max(0, center_h - half_h) end_row = min(h, center_h + half_h) start_col = max(0, center_w - half_w) end_col = min(w, center_w + half_w) middle_region = test[start_row:end_row, start_col:end_col]
内容的提问来源于stack exchange,提问作者Suntory
相关产品推荐
相关产品推荐

