---
# System prepended metadata

title: opencv

---


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