混合图像增强 以人体骨骼图像为例
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
img1= cv.imread('C:\Users\86186\Desktop\body.jpg',0)
plt.figure(figsize=(40, 40))
plt.subplot(241)
plt.title('A')
plt.imshow(img1, cmap='gray')
img2 = cv.Laplacian(img1, cv.CV_64F)
img2 = 255*(img2 - img2.min())/(img2.max() - img2.min())
plt.subplot(242)
plt.title('laplacian ')
plt.imshow(img2, cmap='gray')
img3 = img1+img2
img3 = 255*(img3 - img3.min())/(img3.max() - img3.min())
plt.subplot(243)
plt.title('A+B=C')
plt.imshow(img3, cmap='gray')
a = cv.Sobel(img3, cv.CV_64F,1,0)
b = cv.Sobel(img3, cv.CV_64F,0,1)
img4 = np.clip(np.abs(a) + np.abs(b), 0, 255)
plt.subplot(244)
plt.title('Sobel D')
plt.imshow(img4, cmap='gray')
img5 = cv.medianBlur(np.uint8(img4), 5)
plt.subplot(245)
plt.title('5*5 E')
plt.imshow(img5, cmap='gray')
img6 = img3*img5
img6 = 255*(img6 - img6.min())/(img6.max() - img6.min())
plt.subplot(246)
plt.title('C*E F')
plt.imshow(img6, cmap='gray')
img7 = img1+img6
img7 = 255*(img7 - img7.min())/(img7.max() - img7.min())
plt.subplot(247)
plt.title('A+F=G')
plt.imshow(img7, cmap='gray')
img8 = 1*(( img7 ) **0.5)
plt.subplot(248)
plt.title('G')
plt.imshow(img8,cmap='gray')
plt.show()
运行结果
实验课完整代码
包括图像的平滑、图像锐化
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读入图像,调整图像大小
img = cv2.imread("C:\Users\86186\Desktop\girl.jpg")
res = cv2.resize(img,None,fx=1/4,fy=1/4,interpolation = cv2.INTER_CUBIC)
# 图像的平滑处理
# 均值滤波
resultBoxFilter = cv2.boxFilter(res,-1,(2,2),normalize=True)
# 高斯滤波
resultGaussianBlur = cv2.GaussianBlur(res,(5,5),0,0)
# 双边滤波
resultBilateralFilter = cv2.bilateralFilter(res,20,100,100)
# 中值滤波
resultMedianBlur = cv2.medianBlur(res,3)
# 卷积运算
kernel = np.ones((3,3),np.float32)/9
resultFilter = cv2.filter2D(res,-1,kernel)
cv2.imshow("res",res)
cv2.imshow("resultBoxFilter", resultBoxFilter)
cv2.imshow("GaussianBlur",resultGaussianBlur)
cv2.imshow("resultBilateralFilter",resultBilateralFilter)
cv2.imshow("resultMedianBlur",resultMedianBlur)
cv2.imshow("resultFilter",resultFilter)
cv2.waitKey(0)
# 题目3:全局阈值处理
res1 = cv2.cvtColor(res,cv2.COLOR_BGR2GRAY)
ret,binary = cv2.threshold(res1,0,255,cv2.THRESH_BINARY | cv2.THRESH_TRIANGLE)
cv2.imshow("binary",binary)
cv2.waitKey(0)
binary2=255-binary
cv2.imshow("binary2",binary2)
cv2.waitKey(0)
ret,binary3=cv2.threshold(res1,160,255,cv2.THRESH_BINARY)
cv2.imshow("binary3",binary3)
cv2.waitKey(0)
# 图像锐化实验
img2=cv2.imread("C:\Users\86186\Desktop\girl.jpg",0)
res33 = cv2.resize(img2,None,fx=1/4,fy=1/4,interpolation = cv2.INTER_CUBIC)
laplacian= cv2.Laplacian(res33,cv2.CV_64F)
sobelx=cv2.Sobel(res33,cv2.CV_64F,0,1,ksize=3)
sobely=cv2.Sobel(res33,cv2.CV_64F,1,0,ksize=3)
canny=cv2.Canny(res33,100,200)
plt.subplot(2,2,1),plt.imshow(canny,cmap ='gray')
plt.title('Canny'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap ='gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx,cmap ='gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4),plt.imshow(sobely,cmap ='gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])
plt.show()
# 混合图像增强 人体骨骼图案例
img1= cv2.imread('C:\Users\86186\Desktop\body.jpg',0)
plt.figure(figsize=(40, 40))
plt.subplot(241)
plt.title('A')
plt.imshow(img1, cmap='gray')
img2 = cv2.Laplacian(img1, cv2.CV_64F)
img2 = 255*(img2 - img2.min())/(img2.max() - img2.min())
plt.subplot(242)
plt.title('laplacian ')
plt.imshow(img2, cmap='gray')
img3 = img1+img2
img3 = 255*(img3 - img3.min())/(img3.max() - img3.min())
plt.subplot(243)
plt.title('A+B=C')
plt.imshow(img3, cmap='gray')
a = cv2.Sobel(img3, cv2.CV_64F,1,0)
b = cv2.Sobel(img3, cv2.CV_64F,0,1)
img4 = np.clip(np.abs(a) + np.abs(b), 0, 255)
plt.subplot(244)
plt.title('Sobel D')
plt.imshow(img4, cmap='gray')
img5 = cv2.medianBlur(np.uint8(img4), 5)
plt.subplot(245)
plt.title('5*5 E')
plt.imshow(img5, cmap='gray')
img6 = img3*img5
img6 = 255*(img6 - img6.min())/(img6.max() - img6.min())
plt.subplot(246)
plt.title('C*E F')
plt.imshow(img6, cmap='gray')
img7 = img1+img6
img7 = 255*(img7 - img7.min())/(img7.max() - img7.min())
plt.subplot(247)
plt.title('A+F=G')
plt.imshow(img7, cmap='gray')
img8 = 1*(( img7 ) **0.5)
plt.subplot(248)
plt.title('G')
plt.imshow(img8,cmap='gray')
plt.show()
```