前言
深度学习中像是pytorch的transform的库中有许多对图像处理的操作,但功能好像有限,
除此之外还有像是opencv,PIL等库也能对图像进行处理,
本次打卡主要以python中的opencv来进行图像处理进行学习
通过这次打卡学习来看一下opencv能否在深度学习的图像处理中发挥作用
基础铺垫
1. opencv结合matplotlib库进行图片显示
1.1 读取数据—在notebook中进行读取
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
cup1 = cv2.imread("lena.jpg",0)
cup2 = cv2.imread("lena.jpg",1)
cup3 = cv2.imread("lena.jpg",-1)
cup=[cup1,cup2,cup3]
# row , column =c[0].shape
print('row: %s ,column: %s'%(row,column))
for c in cup:
plt.imshow(c)
plt.show()
# cv2.imshow('cup2',cup2)
# cv2.imshow('cup3',cup3)
cv2.waitKey()
cv2.destroyAllWindows()
#保存图像
# cv2.imwrite("cup1.jpg", cup1)
# cv2.imwrite("cup2.jpg",cup2)
# cv2.imwrite("cup3.jpg",cup3)



2. 角点与梯度
具体参考这篇博客
用大白话来讲,图像梯度有很高的变化。这种变化是可以用来帮助检测角点的因为图片在某个方向上存在梯度,从而形成角点,为强调图像边缘作准备。
1.3 图像梯度
学过导数的人都知道导数的几何意义表示切线的斜率,这里用梯度的来表示图像边缘
梯度的基本原理可以参考这篇博客
下面就图像梯度给出相应的代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
cup=cv2.imread('lucky_boy.jpg',0)
row,column = cup.shape
print("row:%s,column:%s"%(row,column))
cup_f = np.copy(cup)
cup_f = cup_f.astype("float")
grad = np.zeros((row,column))
for x in range(2,row-1):
for y in range(2,column-1):
gx=abs(cup_f[x+1,y]-cup_f[x-1,y])
gy=abs(cup_f[x,y+1]-cup_f[x-1,y])
grad[x,y] = gx + gy
sharp =cup_f +grad
sharp= np.where(sharp<0, 0, np.where(sharp>255,255,sharp))
grad =grad.astype('uint8')
sharp =sharp.astype('uint8')
cup_all=[cup,grad,sharp]
for c in cup_all:
plt.imshow(c)
plt.show()
cv2.waitKey()



从第二张图片可以看出小男孩的边缘
3. Harrirs角点算法
参考这篇博客
需要用的泰勒二次展开式和实对称矩阵对⻆化等数学知识
(从这里开始,数学很重要,留下了不学无术的泪水qwq)
3.1 Harrirs算法流程
- 当局部窗口同时在水平和竖直方向上移动的时候,计算他们的变化量
具体计算方法的公式如下
然后用个泰勒二维展开


-
学完线性再回来看
- 对于每一个窗口,都计算其中的一个相应函数R
具体的计算
- 最后给定一定阈值threshold,比较R>threshold,得到的值表示为脚点
( 看了半天,还不是很懂,等数学基础补完后在回来看原理)
基于opencv(python版实现)
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
#检测参数
block_size = 3
sobel_size = 3
k = 0.06
image=cv.imread('lucky_boy.jpg')
height = image.shape[0]
width=image.shape[1]
channels =image.shape[2]
#print('width is %s ,height: %s ,channels:%s '%(width,height,channels))
gray_img =cv.cvtColor(image,cv.COLOR_BGR2GRAY)
gray_img=np.float32(gray_img)
corners_img=cv.cornerHarris(gray_img,block_size,sobel_size,k)
kernel=cv.getStructuringElement(cv.MORPH_RECT,(3,3))
dst=cv.dilate(corners_img,kernel)
for r in range(height):
for c in range(width):
pix = dst[r,c]
if pix > 0.05 * dst.max():
cv.circle(image,(c,r),5,(0,0,255),0)
image=cv.cvtColor(image,cv.COLOR_BGR2RGB)
plt.imshow(image)
plt.show()
原图片


本文探讨了使用OpenCV和matplotlib库进行图像处理的方法,包括图片显示、角点检测及Harris角点算法的实现,旨在研究OpenCV在深度学习图像预处理中的应用。





4339

被折叠的 条评论
为什么被折叠?



