马赛克效果
这篇教学会使用 OpenCV 里改变尺寸的功能,实现图像的马赛克效果,接着再透过剪裁图像的方式,做出将图像中特定区域加上马赛克的效果。
快速导览:
因为程序中的 OpenCV 会需要使用镜头或 GPU,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda ) ,并安装 OpenCV 函数库 ( 参考:OpenCV 函数库 )。
马赛克效果
在浏览图片时,如果将小张的图片不断放大,就会看见图片的像素变大,成为一格格的马赛克,运用同样的原理,只要对图片使用“两次 resize()”的方式,就能快速实现马赛克的效果。
下方的程序一开始运用 img.shape 取得图片尺寸,接着使用 cv2.resize() 方法 ( interpolation=cv2.INTER_LINEAR ) 进行缩小,接着再度使用 cv2.resize() 方法搭配 ( interpolation=cv2.INTER_NEAREST ) 进行放大,就会出现马赛克效果。
import cv2
img = cv2.imread('mona.jpg')
size = img.shape # 取得原始圖片的資訊
level = 15 # 縮小比例 ( 可當作馬賽克的等級 )
h = int(size[0]/level) # 按照比例縮小後的高度 ( 使用 int 去除小數點 )
w = int(size[1]/level) # 按照比例縮小後的寬度 ( 使用 int 去除小數點 )
mosaic = cv2.resize(img, (w,h), interpolation=cv2.INTER_LINEAR) # 根據縮小尺寸縮小
mosaic = cv2.resize(mosaic, (size[1],size[0]), interpolation=cv2.INTER_NEAREST) # 放大到原本的大小
cv2.imshow('oxxostudio', mosaic)
cv2.waitKey(0) # 按下任意鍵停止
cv2.destroyAllWindows()
特定区域马赛克
延伸上方的程序码,搭配“剪裁图像”文章的范例,就能将图像中特定的区域马赛克,下方的范例会将蒙娜丽莎的脸加上马赛克。
import cv2
img = cv2.imread('mona.jpg')
x = 135 # 剪裁區域左上 x 座標
y = 90 # 剪裁區域左上 y 座標
cw = 100 # 剪裁區域寬度
ch = 120 # 剪裁區域高度
mosaic = img[y:y+ch, x:x+cw] # 取得剪裁區域
level = 15 # 馬賽克程度
h = int(ch/level) # 縮小的高度 ( 使用 int 去除小數點 )
w = int(cw/level) # 縮小的寬度 ( 使用 int 去除小數點 )
mosaic = cv2.resize(mosaic, (w,h), interpolation=cv2.INTER_LINEAR)
mosaic = cv2.resize(mosaic, (cw,ch), interpolation=cv2.INTER_NEAREST)
img[y:y+ch, x:x+cw] = mosaic # 將圖片的剪裁區域,換成馬賽克的圖
cv2.imshow('oxxostudio', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
微信扫码关注
抖音扫码关注