图像处理基础操作+Opencv做图像处理

🐳图像处理总结

图像的处理这里从一个角度来分为两类,一种是传统的处理方法,利用牛逼的数学理论和算法进行图像的处理。另一类利用玄学深度学习和一些机器学习思想来根据你想要的目标来训练模型获得图像处理


🔨图像处理的基本工具

图像处理的工具和处理方法类似分为两大类,一种以传统方法为基础构建的处理工具,另一种以神经网络结构为基础进行构建的工具,两者之间也存在相互借鉴

🏹Opencv的使用

🕸python版本的安装

4.5.5.64版本的opencv pycharm可以自动补全,版本再高目前无法补全

pip install opencv-python==4.5.5.64 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install opencv-contrib-python==4.5.5.64 -i https://pypi.tuna.tsinghua.edu.cn/simple
 

🕸opencv图像显示和保存

import numpy as np
import cv2 as cv

img = cv.imread('F:\BaiduSyncdisk\ML\project\ImgSeg\OpenCv\images\liang3.jpg',1)
cv.imshow('image',img)
k = cv.waitKey(0)
if k == 27: # ESC 退出
    cv.destroyAllWindows()
elif k == ord('s'): # 's' 保存退出
    cv.imwrite('messigray.png',img)
    cv.destroyAllWindows()

建议使用matplotlib 来显示图片

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # 隐藏 X 和 Y 轴的刻度值
plt.show()

🐋关于图像的一些知识

🦈图像格式——颜色空间格式说明


🐋图像处理的领域

🦈图像增强处理

图像增强处理的目的是根据任务,减少噪音,增强任务目标的特征。

在这里插入图片描述

🕸图像平滑

图像平滑处理

平滑处理的目的是为了使得像素之间的数值差异变小使得图像变得模糊,把一些尖锐的棱角或者里面突出的像素值给去掉,凸显主要特征。

  • 均值滤波
  • 方框滤波
  • 高斯滤波
  • 中值滤波

🦈图像分割

🐙基于数学计算方法的图像分割总结

🦂基于颜色区间的图像分割

只需要使用相关函数提取指定颜色区间的图片区域即可

import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):
    # Take each frame
    _, frame = cap.read()
    # Convert BGR to HSV
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    # define range of blue color in HSV
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])
    # Threshold the HSV image to get only blue colors
    mask = cv.inRange(hsv, lower_blue, upper_blue)
    # Bitwise-AND mask and original image
    res = cv.bitwise_and(frame,frame, mask = mask)
    cv.imshow('frame',frame)
    cv.imshow('mask',mask)
    cv.imshow('res',res)
    k = cv.waitKey(5) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()
🦂 基于阈值的图像分割

需要灰度处理,然后设定阈值,符合指定阈值范围的提取处来

🦂 基于边缘检测的图像分割

取决于边缘检测算法的好坏

🦂 基于分水岭算法的图像分割`

🐙基于机器学习的图像分割总结

🦂 基于 K-Means 聚类的区域分割

使用Kmean聚类算法,适合颜色区域明显的图片,效果比较好

🦂 基于深度学习——神经网络模型的区域分割

🦈图像边缘检测

图像边缘检测


🦈图像目标检测


🦈图像中线条形状检测

案例

🐙基于霍夫变换的线条形状检测

霍夫变换利用了二维直角坐标系和极坐标系对直线表达形式的不同来识别直线是否存在,具体就是直角坐标系下直线上的所有的点对应的极坐标系上唯一一个点,通过不停的遍历所有点寻找极坐标系下的唯一点,被找到的点个次数会被记录,然后根据阈值获得记录结果,具体过程如下:(左边直角坐标系,右边极坐标)参考链接
在这里插入图片描述

import cv2 as cv
import numpy as np
img = cv.imread(cv.samples.findFile('sudoku.png'))
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
# 先做边缘检测,帅选出需要判断直线的像素点,减少计算量和噪音影响
edges = cv.Canny(gray,50,150,apertureSize = 3)
# 利用帅选后的像素点来做霍夫变换检测直线
lines = cv.HoughLines(edges,1,np.pi/180,200)
# 将极坐标的直线转换回直角坐标系下的直线
for line in lines:
    rho,theta = line[0]  #获得极坐标的半径和角度
    a = np.cos(theta) # 计算cos角度值
    b = np.sin(theta) # 计算sin角度值
    x0 = a*rho  # 计算x值
    y0 = b*rho  # 计算y值
    x1 = int(x0 + 1000*(-b))
    y1 = int(y0 + 1000*(a))
    x2 = int(x0 - 1000*(-b))
    y2 = int(y0 - 1000*(a))
    cv.line(img,(x1,y1),(x2,y2),(0,0,255),2)
cv.imwrite('houghlines3.jpg',img)

欢迎回答为何使用1000*-b

🐙基于深度学习的线条检测


公众号同步更新欢迎关注

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不被定义的号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值