`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()
```