如何用python-opencv识别图片中多个物体的某一个物体的坐标
- 导入相关库
import cv2
import numpy as np
- 读取图片
img = cv2.imread('image.jpg')
- 定义目标物体的颜色区间
lower_color = np.array([0, 0, 0])
upper_color = np.array([255, 255, 255])
- 将图片从BGR转换为HSV颜色空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
- 根据颜色区间获取目标物体的二值图像
mask = cv2.inRange(hsv, lower_color, upper_color)
- 对二值图像进行腐蚀和膨胀操作,去除噪声
kernel = np.ones((5, 5), np.uint8)
mask = cv2.erode(mask, kernel, iterations=1)
mask = cv2.dilate(mask, kernel, iterations=1)
- 对二值图像进行轮廓检测
contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
- 遍历轮廓,找到目标物体的位置
for contour in contours:
area = cv2.contourArea(contour)
if area > 100: # 可以根据实际情况调整阈值
x, y, w, h = cv2.boundingRect(contour)
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
- 显示结果
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
完整代码如下:
import cv2
import numpy as np
img = cv2.imread('image.jpg')
lower_color = np.array([0, 0, 0])
upper_color = np.array([255, 255, 255])
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lower_color, upper_color)
kernel = np.ones((5, 5), np.uint8)
mask = cv2.erode(mask, kernel, iterations=1)
mask = cv2.dilate(mask, kernel, iterations=1)
contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
area = cv2.contourArea(contour)
if area > 100:
x, y, w, h = cv2.boundingRect(contour)
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
``
原文地址: http://www.cveoy.top/t/topic/gucW 著作权归作者所有。请勿转载和采集!