图像基本处理及其编程实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像基本操作
OpenCV是跨平台计算机视觉和机器 学习软件库,可以运行在Linux、 Windows、Android和Mac OS操作系 统上。
OpenCV用C++语言编写,它具有C++ ,Python,Java和MATLAB接口,如 今也提供对于C#、Ch、Ruby,GO的 支持。
图像读取
img1=cv2.imread('cat.jpg')1 cv2.imshow('image',img1)
img_cat=cv2.imread('cat.jpg') img_dog=cv2.imread('dog.jpg') 1 img_dog = cv2.resize(img_dog, (500, 414)) res = cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)
sobely = cv2.convertScaleAbs(sobely)
1
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
scharrx = cv2.Scharr(img,cv2.CV_64F,1,0) scharry = cv2.Scharr(img,cv2.CV_64F,0,1) scharrx = cv2.convertScaleAbs(scharrx) scharry = cv2.convertScaleAbs(scharry) scharrxy = cv2.addWeighted(scharrx,0.5,scharry,0.5,0)
图像梯度
梯度可以用一阶导数和
1
二阶偏导数来求解
图像的梯度转化为算子 对原图像进行卷积
算子
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)
4) 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
Biblioteka Baidu
5) 通过抑制孤立的弱边缘最终完成边缘检测
v1=cv2.Canny(img,80,150) v2=cv2.Canny(img,50,100)
傅里叶变换
cv2.dft(img_float32, flags = cv2.DFT_COMPLEX_OUTPUT)
img2=cv2.imread('cat.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('image',img2)
视频读取
vc=cv2.VideoCapture('test.mp4')
if vc.isOpened():
1
open, frame = vc.read()
else:
傅里叶变换
cv2.dft(img_float32, flags = cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
# 中心位置
1
rows, cols = img.shape
crow, ccol = int(rows/2) , int(cols/2)
open = False
while open:
open, frame = vc.read()
……
vc.release()
边界填充
1
cv2.copyMakeBorder( img, top_size, bottom_size, left_size, right_size, borderType)
图像融合
dft_shift = np.fft.fftshift(dft)
# 中心位置
1
rows, cols = img.shape
crow, ccol = int(rows/2) , int(cols/2)
# 低通滤波 mask = np.zeros((rows, cols, 2), np.uint8) mask[crow-30:crow+30, ccol-30:ccol+30] = 1 # IDFT fshift = dft_shift*mask f_ishift = np.fft.ifftshift(fshift) img_back = cv2.idft(f_ishift) img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])
# 高通滤波 mask = np.ones((rows, cols, 2), np.uint8) mask[crow-30:crow+30, ccol-30:ccol+30] = 0 # IDFT fshift = dft_shift*mask f_ishift = np.fft.ifftshift(fshift) img_back = cv2.idft(f_ishift) img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])
谢谢
laplacian = cv2.Laplacian(img,cv2.CV_64F) laplacian = cv2.convertScaleAbs(laplacian)
边缘检测
Canny边缘检测
1) 使用高斯滤波器,以平滑图像,滤除噪声。
2) 计算图像中每个像素点的梯度强度和方向。
1
3) 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
OpenCV是跨平台计算机视觉和机器 学习软件库,可以运行在Linux、 Windows、Android和Mac OS操作系 统上。
OpenCV用C++语言编写,它具有C++ ,Python,Java和MATLAB接口,如 今也提供对于C#、Ch、Ruby,GO的 支持。
图像读取
img1=cv2.imread('cat.jpg')1 cv2.imshow('image',img1)
img_cat=cv2.imread('cat.jpg') img_dog=cv2.imread('dog.jpg') 1 img_dog = cv2.resize(img_dog, (500, 414)) res = cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)
sobely = cv2.convertScaleAbs(sobely)
1
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
scharrx = cv2.Scharr(img,cv2.CV_64F,1,0) scharry = cv2.Scharr(img,cv2.CV_64F,0,1) scharrx = cv2.convertScaleAbs(scharrx) scharry = cv2.convertScaleAbs(scharry) scharrxy = cv2.addWeighted(scharrx,0.5,scharry,0.5,0)
图像梯度
梯度可以用一阶导数和
1
二阶偏导数来求解
图像的梯度转化为算子 对原图像进行卷积
算子
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)
4) 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
Biblioteka Baidu
5) 通过抑制孤立的弱边缘最终完成边缘检测
v1=cv2.Canny(img,80,150) v2=cv2.Canny(img,50,100)
傅里叶变换
cv2.dft(img_float32, flags = cv2.DFT_COMPLEX_OUTPUT)
img2=cv2.imread('cat.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('image',img2)
视频读取
vc=cv2.VideoCapture('test.mp4')
if vc.isOpened():
1
open, frame = vc.read()
else:
傅里叶变换
cv2.dft(img_float32, flags = cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
# 中心位置
1
rows, cols = img.shape
crow, ccol = int(rows/2) , int(cols/2)
open = False
while open:
open, frame = vc.read()
……
vc.release()
边界填充
1
cv2.copyMakeBorder( img, top_size, bottom_size, left_size, right_size, borderType)
图像融合
dft_shift = np.fft.fftshift(dft)
# 中心位置
1
rows, cols = img.shape
crow, ccol = int(rows/2) , int(cols/2)
# 低通滤波 mask = np.zeros((rows, cols, 2), np.uint8) mask[crow-30:crow+30, ccol-30:ccol+30] = 1 # IDFT fshift = dft_shift*mask f_ishift = np.fft.ifftshift(fshift) img_back = cv2.idft(f_ishift) img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])
# 高通滤波 mask = np.ones((rows, cols, 2), np.uint8) mask[crow-30:crow+30, ccol-30:ccol+30] = 0 # IDFT fshift = dft_shift*mask f_ishift = np.fft.ifftshift(fshift) img_back = cv2.idft(f_ishift) img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])
谢谢
laplacian = cv2.Laplacian(img,cv2.CV_64F) laplacian = cv2.convertScaleAbs(laplacian)
边缘检测
Canny边缘检测
1) 使用高斯滤波器,以平滑图像,滤除噪声。
2) 计算图像中每个像素点的梯度强度和方向。
1
3) 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。