`pip install opencv-python` ## opencv 讀寫圖像 ``` import cv2 # 讀取圖像 image = cv2.imread('image.jpg') # 检查是否成功讀取圖像 if image is not None: # 在这里可以进行图像处理操作 cv2.imshow('Image', image) # 显示图像 cv2.waitKey(0) # 等待用户按下任意键后关闭图像窗口 else: print("無法讀取圖像") ``` ``` import cv2 # 读取图像 image = cv2.imread('image.jpg') # 在这里进行图像处理操作 # 保存图像 cv2.imwrite('output_image.jpg', image) # 显示保存后的图像 cv2.imshow('Saved Image', image) cv2.waitKey(0) ``` ``` import cv2 # 读取图像 image = cv2.imread('image.jpg') # 检查是否成功读取图像 if image is not None: # 显示图像 cv2.imshow('Image', image) cv2.waitKey(0) # 等待用户按下任意键后关闭图像窗口 else: print("无法读取图像") ``` ## line() 畫直線 ``` cv2.line(img, pt1, pt2, color, thickness) # img 來源影像 # pt1 起始點座標 pt2 結束點座標 # color 線條顏色,使用 BGR # thickness 線條粗細,預設 1 ``` ``` import cv2 import numpy as np img = np.zeros((300,300,3), dtype='uint8') # 繪製 300x300 的黑色畫布 cv2.line(img,(50,50),(250,250),(0,0,255),5) # 繪製線條 cv2.imshow('oxxostudio', img) cv2.waitKey(0) # 按下任意鍵停止 cv2.destroyAllWindows() ``` ## arrowedLine() 畫箭頭線條 ``` cv2.arrowedLine(img, pt1, pt2, color, thickness, tipLength) # img 來源影像 # pt1 起始點座標 pt2 結束點座標 # color 線條顏色,使用 BGR # thickness 線條粗細,預設 1 # tipLength 箭頭長度,預設 0.1 ( 箭頭線條長度 x 0.1 ) ``` ``` import cv2 import numpy as np img = np.zeros((300,300,3), dtype='uint8') cv2.arrowedLine(img,(50,50),(250,250),(0,0,255),5) # 繪製箭頭線條 cv2.imshow('oxxostudio', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` ## rectangle() 畫四邊形 ``` cv2.rectangle(img, pt1, pt2, color, thickness) # img 來源影像 # pt1 左上座標 pt2 右下座標 # color 線條顏色,使用 BGR # thickness 線條粗細,預設 1,設定 -1 表示填滿 ``` ``` import cv2 import numpy as np img = np.zeros((300,300,3), dtype='uint8') cv2.rectangle(img,(50,50),(250,250),(0,0,255),5) # 繪製正方形 cv2.imshow('oxxostudio', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 如果要繪製「實心」正方形,可以有兩種方法,第一種只要將 thickness 參數設定為 -1,就可以填滿正方形。 ``` import cv2 import numpy as np img = np.zeros((300,300,3), dtype='uint8') cv2.rectangle(img,(50,50),(250,250),(0,0,255),-1) # 設定 -1 cv2.imshow('oxxostudio', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 也可以使用numpy ``` import cv2 import numpy as np img = np.zeros((300,300,3), dtype='uint8') img[50:250, 50:250] = [0,0,255] # 將中間 200x200 的陣列內容改成 [0,0,255] cv2.imshow('oxxostudio', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` ## circle() 畫圓形 ``` cv2.circle(img, center, radius, color, thickness) # img 來源影像 # center 中心點座標 # radius 半徑 # color 線條顏色,使用 BGR # thickness 線條粗細,預設 1,設定 -1 表示填滿 ``` ``` import cv2 import numpy as np img = np.zeros((300,300,3), dtype='uint8') cv2.circle(img,(150,150),100,(0,0,255),5) # 繪製圓形 cv2.imshow('oxxostudio', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` ## ellipse() 畫橢圓形 ``` cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness) # img 來源影像 # center 中心點座標 # axes 長軸與短軸 # angle 轉向角度,正值逆時針,負值順時針 # startAngle 起始角度,endAngle 結束角度,範圍 0~360 # color 線條顏色,使用 BGR # thickness 線條粗細,預設 1,設定 -1 表示填滿 ``` ``` import cv2 import numpy as np img = np.zeros((300,300,3), dtype='uint8') cv2.ellipse(img,(150,150),(100,50),45,0,360,(0,0,255),5) cv2.ellipse(img,(150,150),(30,100),90,0,360,(255,150,0),5) cv2.ellipse(img,(150,150),(20,120),30,0,360,(0,255,255),5) cv2.imshow('oxxostudio', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` ## polylines() 畫多邊形 ``` cv2.polylines(img, pts, isClosed, color, thickness) # img 來源影像 # pts 座標陣列 ( 使用 numpy 陣列 ) # isClosed 多邊形是否閉合,True 閉合,False 不閉合 # color 線條顏色,使用 BGR # thickness 線條粗細,預設 1 ``` ``` import cv2 import numpy as np img = np.zeros((300,300,3), dtype='uint8') pts = np.array([[150,50],[250,100],[150,250],[50,100]]) # 產生座標陣列 cv2.polylines(img,[pts],True,(0,0,255),5) # 繪製多邊形 cv2.imshow('oxxostudio', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` # 捲積和 當使用不同的捲積核時,可以實現各種不同的影像處理效果。 以下是一些不同類型的捲積核範例,以及它們的應用: 1. 銳化卷積核 ``` import cv2 import numpy as np # 讀取圖像 image = cv2.imread('image.jpg') # 定義一個銳化卷積核 sharpening_kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]]) # 使用filter2D函數進行卷積操作 sharpened_image = cv2.filter2D(image, -1, sharpening_kernel) # 顯示原始圖像和銳化後的圖像 cv2.imshow('原始圖像', image) cv2.imshow('銳化後的圖像', sharpened_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 2. 邊緣檢測卷積核: ```python import cv2 import numpy as np # 讀取圖像 image = cv2.imread('image.jpg') # 定義一個邊緣檢測卷積核(Sobel) sobel_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]) # 使用filter2D函數進行卷積操作 edge_image_x = cv2.filter2D(image, -1, sobel_x) # 顯示原始圖像和邊緣檢測後的圖像 cv2.imshow('原始圖像', image) cv2.imshow('邊緣圖像 (Sobel X)', edge_image_x) cv2.waitKey(0) cv2.destroyAllWindows() ``` 3. 模糊卷積核: ```python import cv2 import numpy as np # 讀取圖像 image = cv2.imread('image.jpg') # 定義一個高斯模糊卷積核 gaussian_blur_kernel = np.array([[1, 2, 1], [2, 4, 2], [1, 2, 1]]) / 16 # 使用filter2D函數進行卷積操作 blurred_image = cv2.filter2D(image, -1, gaussian_blur_kernel) # 顯示原始圖像和模糊後的圖像 cv2.imshow('原始圖像', image) cv2.imshow('模糊圖像 (高斯模糊)', blurred_image) cv2.waitKey(0) cv2.destroyAllWindows() ```