python提取图片最大红色轮廓并用矩形框选
时间: 2023-07-06 19:30:47 浏览: 161
python实现在图片上画特定大小角度矩形框
5星 · 资源好评率100%
好的,可以使用OpenCV库来完成这个任务。首先,我们需要读入一张图片,并将其转换为HSV色彩空间。
```python
import cv2
import numpy as np
# 读入图片
img = cv2.imread('image.jpg')
# 将图片转换为HSV色彩空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
```
接下来,我们需要定义红色的颜色范围,用于过滤出图片中的红色部分。
```python
# 定义红色颜色范围
lower_red = np.array([0, 50, 50])
upper_red = np.array([10, 255, 255])
lower_red2 = np.array([160, 50, 50])
upper_red2 = np.array([180, 255, 255])
# 过滤出红色部分
mask_red1 = cv2.inRange(hsv, lower_red, upper_red)
mask_red2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask_red = cv2.bitwise_or(mask_red1, mask_red2)
```
然后,我们可以使用形态学操作,如腐蚀和膨胀,来去除噪点和连接断开的部分。
```python
# 进行形态学操作
kernel = np.ones((5,5), np.uint8)
mask_red = cv2.erode(mask_red, kernel)
mask_red = cv2.dilate(mask_red, kernel)
```
接着,我们可以使用轮廓检测函数`cv2.findContours()`来获取红色部分的轮廓。
```python
# 获取红色部分的轮廓
contours, _ = cv2.findContours(mask_red, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
```
最后,我们可以遍历轮廓,找到最大的红色轮廓,并用矩形框选它。
```python
# 找到最大的红色轮廓
max_contour = max(contours, key=cv2.contourArea)
# 获取矩形框坐标
x, y, w, h = cv2.boundingRect(max_contour)
# 在图片上绘制矩形框
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
# 显示图片
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
完整代码如下:
```python
import cv2
import numpy as np
# 读入图片
img = cv2.imread('image.jpg')
# 将图片转换为HSV色彩空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 定义红色颜色范围
lower_red = np.array([0, 50, 50])
upper_red = np.array([10, 255, 255])
lower_red2 = np.array([160, 50, 50])
upper_red2 = np.array([180, 255, 255])
# 过滤出红色部分
mask_red1 = cv2.inRange(hsv, lower_red, upper_red)
mask_red2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask_red = cv2.bitwise_or(mask_red1, mask_red2)
# 进行形态学操作
kernel = np.ones((5,5), np.uint8)
mask_red = cv2.erode(mask_red, kernel)
mask_red = cv2.dilate(mask_red, kernel)
# 获取红色部分的轮廓
contours, _ = cv2.findContours(mask_red, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 找到最大的红色轮廓
max_contour = max(contours, key=cv2.contourArea)
# 获取矩形框坐标
x, y, w, h = cv2.boundingRect(max_contour)
# 在图片上绘制矩形框
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
# 显示图片
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文