目的
- 分享學習心得,從實操中學習圖像的前處理。代碼直接跑,什么都不用改,如果網址失效,直接換網址即可。
庫
- imageio==2.6.0 用來讀取網址圖片
- cv2==3.2.14 圖像操作
- numpy==1.19.0
import imageio # 可以從網址中讀取圖片的庫 --> pip install imageio
import cv2
file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg"
img = imageio.imread(file_path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR) # 讀取的是RGB通道,轉成opencv的BGR通過
cv2.imwrite("cat.jpg",img )
cv2.imshow("cat", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 圖片分通道 -->B,G,R
import imageio
import cv2
file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg"
img = imageio.imread(file_path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR) # 讀取的是RGB通道,轉成opencv的BGR通道
img = cv2.resize(img,(360,640)) # 更改大小,便于顯示
b,g,r = cv2.split(img) # 圖片分通道
# img_1 = cv2.merge((b, g, r)) # 分割后的通道合并
bgr = np.hstack((b,g,r)) # 圖片矩陣并排顯示
cv2.imwrite("split.jpg",bgr )
cv2.imshow("split",bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()
import imageio
import cv2
file_path = "http://1824.img.pp.sohu.com.cn/images/blog/2009/7/21/21/16/1234ab28e28g214.jpg"
img = imageio.imread(file_path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
kernel = (7,7) # 腐蝕或膨脹的程度
erode = cv2.erode(img, kernel, iterations=20) # 腐蝕操作
dilate = cv2.dilate(img, kernel, iterations=20) # 膨脹操作
result = np.hstack((img,erode,dilate)) # 原圖 - 腐蝕 - 膨脹
cv2.imwrite("erode_dilate.jpg",result)
cv2.imshow("result",result)
cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
import imageio
import cv2
file_path = "https://img.pconline.com.cn/images/photoblog/9/7/3/6/9736422/20099/21/1253523872358_mthumb.jpg"
img = imageio.imread(file_path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
img = cv2.resize(img,(360,360))
kernel = (7,7) # 腐蝕或膨脹的程度
opens = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations=20) # 開運算 -->先腐蝕再膨脹
close = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=20) # 閉運算 -->先膨脹再腐蝕
result = np.hstack((img,opens,close)) # 原圖 - 開運算 - 閉運算
cv2.imwrite("open_close.jpg",result)
cv2.imshow("result",result)
cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
import imageio
import cv2
file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg"
img = imageio.imread(file_path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
img = cv2.resize(img,(360,640))
sobelx = cv2.Sobel(img, ddepth=cv2.CV_32F, dx=1, dy=0, ksize=3) # 延x方向檢測
sobely = cv2.Sobel(img, ddepth=cv2.CV_32F, dx=0, dy=1, ksize=3) # 延y方向檢測
# sobelxy = cv2.Sobel(img, ddepth=cv2.CV_32F, dx=1, dy=1, ksize=3) # 也可以直接x-y一起sobel,但一般效果沒有分開處理的好
convx = cv2.convertScaleAbs(sobelx) #
convy = cv2.convertScaleAbs(sobely)
sobel = cv2.addWeighted(convx, 0.5, convy, 0.5, 0)
res = np.hstack((img, convx, convy, sobel)) # 原圖 - sobelx - sobely - sobel
cv2.imwrite("sobel.jpg",res)
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
import imageio
import cv2
file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg"
img = imageio.imread(file_path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img = cv2.resize(img,(360,640))
print(img.shape)
# thresh1和thresh2可以根據實際圖片情況更改
thresh1 = 0
thresh2 = 125
canny = cv2.Canny(img, thresh1, thresh2)
print(canny.shape)
result = np.hstack((img,canny))
cv2.imwrite("canny.jpg",result)
cv2.imshow('res', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 上采樣
import numpy as np
import imageio
import cv2
file_path = "http://img.mp.itc.cn/upload/20170206/3cbd5b8834df4b409d289d9d8d50530a_th.jpg"
original = imageio.imread(file_path)
img = cv2.cvtColor(original,cv2.COLOR_RGB2BGR)
# 下采樣
down1 = cv2.pyrDown(img,(int(img.shape[0]/2),int(img.shape[1]/2)))
down2 = cv2.pyrDown(down1,(int(img.shape[0]/4),int(img.shape[1]/4)))
# # 上采樣
# up1 = cv2.pyrUp(img,(int(img.shape[0]/2),int(img.shape[1]/2)))
# up2 = cv2.pyrUp(up1 ,(int(img.shape[0]/4),int(img.shape[1]/4)))
cv2.imwrite("original.jpg",img)
cv2.imwrite("down1.jpg",down1)
cv2.imwrite("down2.jpg",down2)
cv2.imshow('original',img)
cv2.imshow('down1',down1)
cv2.imshow('down2',down2)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 總結
- 參考文獻
https://max.book118.com/html/2018/0523/168182943.shtm
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的CV之路——opencv基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。