图像处理基础操作+Opencv做图像处理
🐳图像处理总结
图像的处理这里从一个角度来分为两类,一种是传统的处理方法,利用牛逼的数学理论和算法进行图像的处理。另一类利用玄学深度学习和一些机器学习思想来根据你想要的目标来训练模型获得图像处理
🔨图像处理的基本工具
图像处理的工具和处理方法类似分为两大类,一种以传统方法为基础构建的处理工具,另一种以神经网络结构为基础进行构建的工具,两者之间也存在相互借鉴
- 🎯Pytorch
- pytorchlightning pytorch配合.pytorchlightning.使用会更方便
- 🎯Tensorflow
- 🎯paddlepaddle
🏹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)
🐙基于深度学习的线条检测
公众号同步更新欢迎关注