You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用掩码去除硬币磨砂区域以识别光亮部分划痕?

硬币光亮区域划痕检测实现方案

核心思路

基于你已有的磨砂区域轮廓图,通过掩码技术屏蔽磨砂区域,仅保留光亮区域后,再通过边缘检测+霍夫直线变换统计划痕数量,流程如下:

  1. 从磨砂轮廓图生成完整的磨砂区域掩码
  2. 用掩码过滤原灰度图,提取光亮区域
  3. 对光亮区域做划痕检测与统计

代码实现(Python + OpenCV)

先确保安装依赖:

pip install opencv-python numpy

完整代码:

import cv2
import numpy as np

# 1. 加载图像(替换为你的实际文件路径)
gray_coin = cv2.imread('无划痕硬币灰度图.jpg', cv2.IMREAD_GRAYSCALE)
contour_map = cv2.imread('磨砂区域轮廓图.png', cv2.IMREAD_GRAYSCALE)

# 2. 生成磨砂区域掩码
# 二值化轮廓图,提取磨砂边缘
_, binary_contour = cv2.threshold(contour_map, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓(只取最外层轮廓)
contours, _ = cv2.findContours(binary_contour, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 创建与原图像尺寸一致的空白掩码
mask = np.zeros_like(gray_coin)
# 填充轮廓,得到完整的磨砂区域掩码(白色区域为磨砂区)
cv2.drawContours(mask, contours, -1, 255, thickness=cv2.FILLED)

# 3. 提取光亮区域
# 反转掩码:白色为光亮区,黑色为磨砂区
inverted_mask = cv2.bitwise_not(mask)
# 掩码与原灰度图做与运算,仅保留光亮区域
bright_area = cv2.bitwise_and(gray_coin, gray_coin, mask=inverted_mask)

# 4. 检测并统计光亮区域内的划痕
# Canny边缘检测提取划痕边缘
scratch_edges = cv2.Canny(bright_area, 50, 150)
# 霍夫直线变换检测划痕线条(参数可根据实际划痕调整)
lines = cv2.HoughLinesP(
    scratch_edges,
    rho=1,
    theta=np.pi/180,
    threshold=20,
    minLineLength=10,
    maxLineGap=5
)
# 统计划痕数量
scratch_num = len(lines) if lines is not None else 0
print(f"光亮区域划痕数量:{scratch_num}")

# 可选:可视化结果
cv2.imshow('仅保留光亮区域', bright_area)
cv2.imshow('划痕检测结果', scratch_edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

参数调整建议

  • 如果磨砂区域掩码不够准确:调整cv2.threshold的阈值(127),或更换轮廓查找模式
  • 如果划痕检测不准:修改Canny的阈值(50/150),或霍夫变换的threshold/minLineLength/maxLineGap参数,适配你的划痕粗细、长度

内容的提问来源于stack exchange,提问作者Ioanna Deroukaki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:25:32