第一篇:用OpenCV完成一个完整的图像处理流程

一、为啥要做这个?

有时候,我们拿到一张图片,可能需要做一些“美容”或者“体检”。比如,我们想看看图片里有哪些物体,或者把图片里的噪声去掉,让它看起来更清晰。OpenCV就像是一个超级工具箱,里面有各种各样的工具,可以帮助我们完成这些任务。

二、操作步骤
1. 先装好工具

安装OpenCV和NumPy,这两个库是我们的好帮手。在终端或者命令提示符里输入:

bash

复制

pip install opencv-python numpy

等它装好就行啦。

2. 导入工具包

把需要的工具包都请进来:

Python

复制

import cv2
import numpy as np
3. 读取图片

告诉电脑图片在哪里,然后把它读进来。比如图片在桌面上,你得写上完整的路径:

Python

复制

image = cv2.imread('C:/Users/你的用户名/Desktop/图片名.jpg')

如果路径写错了,图片就加载不了。

4. 检查图片有没有加载成功

就像你去拿一张照片,得看看是不是真的拿到了。代码里这样写:

Python

复制

if image is None:
    print("哎呀,图片没加载成功,检查一下路径是不是写错了哦!")
else:
    print("太好了,图片加载成功啦!")
5. 把图片变成黑白的(灰度化)

有时候,我们只需要看图片的明暗,不需要颜色。用这个函数把图片从彩色变成黑白:

Python

复制

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

这就好像是给图片穿了一件只有黑白两色的衣服。

6. 给图片“磨皮”(模糊处理)

有时候,图片太清晰了反而不好看,比如有一些噪点或者瑕疵。模糊处理就像是给图片“磨皮”,让它的细节看起来更柔和:

Python

复制

blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)

这里用的是高斯模糊,(5, 5) 是模糊的强度,值越大,模糊效果越明显。

7. 找出图片的边缘(边缘检测)

边缘检测就像是给图片画轮廓线,帮助我们看清物体的形状。用Canny边缘检测算法:

Python

复制

edges = cv2.Canny(blurred_image, 50, 150)

50150 是阈值,可以根据图片调整。

8. 找出图片里的物体(轮廓提取)

轮廓提取就像是在图片里找“宝藏”,把所有物体的轮廓都找出来:

Python

复制

contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

cv2.RETR_EXTERNAL 表示只找最外层的轮廓。

9. 在原图上画出轮廓

现在我们已经找到了轮廓,可以在原图上把它们画出来,方便我们更直观地看到效果:

Python

复制

cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

这里用绿色((0, 255, 0))画轮廓,线条宽度是2。

10. 显示所有处理后的图片

把处理后的图片都显示出来,看看效果:

Python

复制

cv2.imshow('原图', image)
cv2.imshow('灰度图', gray_image)
cv2.imshow('模糊图', blurred_image)
cv2.imshow('边缘图', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
三、完整的代码

Python

复制

import cv2
import numpy as np

# 读取图片
image = cv2.imread('C:/Users/你的用户名/Desktop/图片名.jpg')

# 检查图片有没有加载成功
if image is None:
    print("哎呀,图片没加载成功,检查一下路径是不是写错了哦!")
else:
    print("太好了,图片加载成功啦!")

    # 把图片变成黑白的
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 给图片“磨皮”
    blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)

    # 找出图片的边缘
    edges = cv2.Canny(blurred_image, 50, 150)

    # 找出图片里的物体
    contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 在原图上画出轮廓
    cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

    # 显示所有处理后的图片
    cv2.imshow('原图', image)
    cv2.imshow('灰度图', gray_image)
    cv2.imshow('模糊图', blurred_image)
    cv2.imshow('边缘图', edges)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
四、注意点
  1. 路径问题:确保图片路径写对了,否则图片加载不出来。

  2. 参数调整:边缘检测和模糊的参数可以根据图片的不同进行调整,比如模糊的核大小、边缘检测的阈值。

  3. 显示窗口cv2.imshow() 只能在有图形界面的环境中运行,比如Windows或macOS。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值