下面是Python-opencv实现红绿两色识别操作的完整攻略:
1. 安装OpenCV库
在终端中使用pip命令安装OpenCV库:
pip install opencv-python
2. 读取图片
导入OpenCV库后,我们可以使用cv2.imread()函数读取图片。这个函数的参数是图片的路径。
import cv2
# 读取图片
img = cv2.imread("test.jpg")
3. 调整图片大小
为了提高处理速度,我们可以将图片大小调整为较小的尺寸。使用cv2.resize()函数实现图片大小的调整。
import cv2
# 读取图片
img = cv2.imread("test.jpg")
# 调整图片大小
resized_img = cv2.resize(img, (640, 480))
4. 将图片转换为HSV格式
HSV是一种常用的颜色空间,其中H表示色调(0°到360°),S表示饱和度(0到1),V表示亮度(0到1)。使用cv2.cvtColor()函数将BGR格式的图片转换为HSV格式。
import cv2
# 读取图片
img = cv2.imread("test.jpg")
# 调整图片大小
resized_img = cv2.resize(img, (640, 480))
# 转换为HSV格式
hsv_img = cv2.cvtColor(resized_img, cv2.COLOR_BGR2HSV)
5. 提取红色和绿色区域
接下来,我们可以使用cv2.inRange()函数提取红色和绿色区域。这个函数的前两个参数是图片和颜色的下界,第三个参数是颜色的上界。
import cv2
import numpy as np
# 读取图片
img = cv2.imread("test.jpg")
# 调整图片大小
resized_img = cv2.resize(img, (640, 480))
# 转换为HSV格式
hsv_img = cv2.cvtColor(resized_img, cv2.COLOR_BGR2HSV)
# 提取红色区域
lower_red = np.array([0, 70, 50])
upper_red = np.array([10, 255, 255])
red_mask1 = cv2.inRange(hsv_img, lower_red, upper_red)
lower_red = np.array([170, 70, 50])
upper_red = np.array([180, 255, 255])
red_mask2 = cv2.inRange(hsv_img, lower_red, upper_red)
red_mask = red_mask1 + red_mask2
# 提取绿色区域
lower_green = np.array([50, 70, 50])
upper_green = np.array([70, 255, 255])
green_mask = cv2.inRange(hsv_img, lower_green, upper_green)
6. 显示红色和绿色区域
最后,我们可以使用cv2.imshow()函数显示红色和绿色区域。这个函数的第一个参数是窗口的名称,第二个参数是要显示的图片。
import cv2
import numpy as np
# 读取图片
img = cv2.imread("test.jpg")
# 调整图片大小
resized_img = cv2.resize(img, (640, 480))
# 转换为HSV格式
hsv_img = cv2.cvtColor(resized_img, cv2.COLOR_BGR2HSV)
# 提取红色区域
lower_red = np.array([0, 70, 50])
upper_red = np.array([10, 255, 255])
red_mask1 = cv2.inRange(hsv_img, lower_red, upper_red)
lower_red = np.array([170, 70, 50])
upper_red = np.array([180, 255, 255])
red_mask2 = cv2.inRange(hsv_img, lower_red, upper_red)
red_mask = red_mask1 + red_mask2
# 提取绿色区域
lower_green = np.array([50, 70, 50])
upper_green = np.array([70, 255, 255])
green_mask = cv2.inRange(hsv_img, lower_green, upper_green)
# 显示红色区域
cv2.imshow("Red Mask", red_mask)
# 显示绿色区域
cv2.imshow("Green Mask", green_mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
示例1:
- 假设我们有一张名为test1.jpg的图片,我们想要在这张图片中提取红色和绿色区域。
import cv2
import numpy as np
# 读取图片
img = cv2.imread("test1.jpg")
# 调整图片大小
resized_img = cv2.resize(img, (640, 480))
# 转换为HSV格式
hsv_img = cv2.cvtColor(resized_img, cv2.COLOR_BGR2HSV)
# 提取红色区域
lower_red = np.array([0, 70, 50])
upper_red = np.array([10, 255, 255])
red_mask1 = cv2.inRange(hsv_img, lower_red, upper_red)
lower_red = np.array([170, 70, 50])
upper_red = np.array([180, 255, 255])
red_mask2 = cv2.inRange(hsv_img, lower_red, upper_red)
red_mask = red_mask1 + red_mask2
# 提取绿色区域
lower_green = np.array([50, 70, 50])
upper_green = np.array([70, 255, 255])
green_mask = cv2.inRange(hsv_img, lower_green, upper_green)
# 显示红色区域
cv2.imshow("Red Mask", red_mask)
# 显示绿色区域
cv2.imshow("Green Mask", green_mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
示例2:
- 假设我们有一张名为test2.jpg的图片,我们想要在这张图片中提取红色和绿色区域。
import cv2
import numpy as np
# 读取图片
img = cv2.imread("test2.jpg")
# 调整图片大小
resized_img = cv2.resize(img, (640, 480))
# 转换为HSV格式
hsv_img = cv2.cvtColor(resized_img, cv2.COLOR_BGR2HSV)
# 提取红色区域
lower_red = np.array([0, 70, 50])
upper_red = np.array([10, 255, 255])
red_mask1 = cv2.inRange(hsv_img, lower_red, upper_red)
lower_red = np.array([170, 70, 50])
upper_red = np.array([180, 255, 255])
red_mask2 = cv2.inRange(hsv_img, lower_red, upper_red)
red_mask = red_mask1 + red_mask2
# 提取绿色区域
lower_green = np.array([50, 70, 50])
upper_green = np.array([70, 255, 255])
green_mask = cv2.inRange(hsv_img, lower_green, upper_green)
# 显示红色区域
cv2.imshow("Red Mask", red_mask)
# 显示绿色区域
cv2.imshow("Green Mask", green_mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
这样,我们就完成了Python-opencv实现红绿两色识别操作的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python-opencv实现红绿两色识别操作 - Python技术站