Python 图像处理入门(识别物体轮廓)

经过灰度化、高斯滤波、二值化后得到大致轮廓,根据轮廓大小筛选部分干扰元素,尽可能只保留主要物体的轮廓。
(1)灰度化
图像灰度化是指将图像从彩色转换为灰度图像的过程。这通常是通过将每个像素的 RGB 值转换为单个灰度值来完成的。
灰度值通常是使用灰度转换公式将 RGB 值转换为单个数值的过程。常用的灰度转换公式如下:
灰度值 = 0.2989 * R + 0.5870 * G + 0.1140 * B
其中 R、G 和 B 分别是像素的红、绿、蓝分量的值。
(2)高斯滤波
高斯滤波是一种图像平滑处理方法,可以用来去除噪声或模糊图像。它通过在图像上应用一个高斯卷积核来实现这一目的。
高斯卷积核是一个二维矩阵,其中的每个元素都是高斯函数的权值。高斯函数有一个平均值,其中权值较高的元素位于平均值附近,而权值较低的元素位于平均值较远处。这意味着高斯滤波会让图像中邻近的像素有更大的贡献,而较远的像素则会有较小的贡献。
(3)二值化
图像二值化是指将图像转换为黑白图像的过程。这通常是通过将图像中的每个像素的灰度值转换为 0 或 255 来实现的。在二值图像中,像素值为 0 的像素被视为黑色,像素值为 255 的像素被视为白色。
流程图

from PIL import Image
import cv2
import numpy as np

prefix = r'D:\imgs\\'
img_name = '武器3.jpg'


if __name__ == "__main__":
    # 读入图像
    image = Image.open(prefix + img_name)
    image = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)

    # 转换为灰度图
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 高斯滤波
    blur = cv2.GaussianBlur(gray, (5, 5), 0)
    # 二值化
    ret, binary = cv2.threshold(blur, 127, 255, cv2.THRESH_BINARY)

    contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    for i in range(1, len(contours)):
        if contours[i].size > 200:
            cv2.drawContours(image, contours, i, (0, 0, 255), 3)
    cv2.imshow('img', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


武器3.jpg
处理结果

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值