一、實驗過程
我使用的是python語言+openCV來實現圖像濾波。
使用imread()函數讀取圖片,使用imshow()函數顯示圖片,waitKey()函數含義為按下任意鍵繼續;
代碼示例:
img = cv2.imread("photo1.bmp")
cv2.imshow("img",img)
cv2.waitKey(0)
結果:
我們可以用pil來實現在圖片上顯示文字,首先先安裝pillow
實例代碼:
#cv2和PIL中顏色的hex碼的儲存順序不同,需轉RGB模式
pil_img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #Image.fromarray()將數組類型轉成圖片格式,與np.array()相反
pilimg = Image.fromarray(pil_img) draw = ImageDraw.Draw(pilimg)#PIL圖片上打印漢字
font = ImageFont.truetype("simhei.ttf",50,encoding="utf-8") draw.text((0,0),"原圖像",(255,0,0),font=font) img1 = cv2.cvtColor(np.array(pilimg),cv2.COLOR_RGB2BGR)#將圖片轉成cv2.imshow()可以顯示的數組格式
cv2.imshow("img1",img1) cv2.waitKey()
結果:
均值濾波的實例代碼:
img2 = cv2.blur(img,(5,5)) pil_img1 = cv2.cvtColor(img2,cv2.COLOR_BGR2RGB) pilimg1 = Image.fromarray(pil_img1) draw = ImageDraw.Draw(pilimg1)#PIL圖片上打印漢字
font = ImageFont.truetype("simhei.ttf",20,encoding="utf-8") draw.text((0,0),"均值濾波",(255,0,0),font=font) img3 = cv2.cvtColor(np.array(pilimg1),cv2.COLOR_RGB2BGR) cv2.imshow("img3",img3) cv2.waitKey()
結果:
中值濾波的實例代碼:
img_median = cv2.medianBlur(img, 5) pil_img2 = cv2.cvtColor(img_median,cv2.COLOR_BGR2RGB) pilimg2 = Image.fromarray(pil_img2) draw = ImageDraw.Draw(pilimg2)#PIL圖片上打印漢字
font = ImageFont.truetype("simhei.ttf",20,encoding="utf-8") draw.text((0,0),"中值濾波",(255,0,0),font=font) img4 = cv2.cvtColor(np.array(pilimg2),cv2.COLOR_RGB2BGR)#將圖片轉成cv2.imshow()可以顯示的數組格式
cv2.imshow("img4",img4) cv2.waitKey(0)
結果:
高斯濾波的實例代碼:
# 高斯濾波
img_Guassian = cv2.GaussianBlur(img,(5,5),0) pil_img3 = cv2.cvtColor(img_Guassian,cv2.COLOR_BGR2RGB) pilimg3 = Image.fromarray(pil_img3) draw = ImageDraw.Draw(pilimg3)#PIL圖片上打印漢字
font = ImageFont.truetype("simhei.ttf",20,encoding="utf-8") draw.text((0,0),"高斯濾波",(255,0,0),font=font) img5 = cv2.cvtColor(np.array(pilimg3),cv2.COLOR_RGB2BGR)#將圖片轉成cv2.imshow()可以顯示的數組格式
cv2.imshow("img5",img5) cv2.waitKey(0)
結果:
邊緣檢測的實例代碼:
img6 = cv2.Canny(pil_img3,30,150) img_Guassian = cv2.GaussianBlur(img6,(5,5),0) pil_img4 = cv2.cvtColor(img6,cv2.COLOR_BGR2RGB) pilimg4 = Image.fromarray(pil_img4) draw = ImageDraw.Draw(pilimg4)#PIL圖片上打印漢字
font = ImageFont.truetype("simhei.ttf",20,encoding="utf-8") draw.text((0,0),"高斯濾波邊緣檢測",(0,255,0),font=font) img7 = cv2.cvtColor(np.array(pilimg4),cv2.COLOR_RGB2BGR) cv2.imshow("img7",img7) cv2.waitKey(0)
結果:
二、實驗中的錯誤
輸入from PIL import Image,ImageDraw,ImageFont報錯,然后發現自己沒有安裝pillow,則我們輸入pip install pillow,在輸入就成功了。
三、實驗總結
學習了OpenCV的圖像濾波,途中遇到了問題也較快解決,鍛煉了自己的能力。