cv2.Laplacian利用LOG(Laplacian of Gaussian, LOG)提取图像的边缘或者检测斑点

利用高斯拉普拉斯算子(Laplacian of Gaussian, LOG)提取图像边缘是一种结合了高斯平滑和拉普拉斯边缘检测的方法。这种方法首先使用高斯滤波器对图像进行平滑处理,以减少噪声对边缘检测的影响,然后应用拉普拉斯算子来检测平滑后图像中的边缘。

以下是使用Python和OpenCV库来实现LOG边缘检测的步骤:

  1. 导入必要的库
    你需要导入OpenCV(cv2)和NumPy(np)库。

  2. 读取图像
    使用OpenCV的cv2.imread()函数读取图像。

  3. 转换为灰度图像(如果图像不是灰度图像):
    使用cv2.cvtColor()函数将图像转换为灰度图像。

  4. 应用高斯平滑
    使用OpenCV的cv2.GaussianBlur()函数对灰度图像进行高斯平滑处理。

  5. 应用拉普拉斯算子
    对平滑后的图像应用拉普拉斯算子,使用OpenCV的cv2.Laplacian()函数。

  6. 寻找边缘(可选):
    拉普拉斯算子的结果是一个图像,其中边缘区域会有较高的绝对值。你可以通过设置阈值来识别这些区域作为边缘。

  7. 显示结果
    使用OpenCV的cv2.imshow()函数或Matplotlib库来显示边缘检测结果。

  8. 示例代码:

    def laplacian(img, save, name):
    
    
    # 读入图像,转换为灰度图
        image = cv2.imread(img, cv2.IMREAD_GRAYSCALE)
    # 高斯滤波
        blurred = cv2.GaussianBlur(image, (5, 5), 0)
    # 拉普拉斯计算
        laplacian = cv2.Laplacian(blurred, cv2.CV_64F)
    # 计算结果取绝对值后归一化到0-255之间
        abs_laplacian = np.absolute(laplacian)
        laplacian_8u = np.uint8(cv2.normalize(abs_laplacian, None, 0, 255, cv2.NORM_MINMAX))
    
    # 根据阈值将结果二值化
        _, thresholded = cv2.threshold(laplacian_8u, 50, 255, cv2.THRESH_BINARY)
    # 找到二值化图像中的轮廓
        contours, _ = cv2.findContours(thresholded, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    # 将轮廓画在原图上
        contour_image = cv2.merge((image, image, image))
        cv2.drawContours(contour_image, contours, -1, (0, 0, 255), 1)
    
        cv2.imwrite(f'./{save}/{name}_laplaci.png', contour_image)
    
        cv2.imshow('contour', contour_image)
        cv2.waitKey()
        cv2.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值