1. 导入相关库
import cv2
import numpy as np
  1. 读取图片
img = cv2.imread('image.jpg')
  1. 定义目标物体的颜色区间
lower_color = np.array([0, 0, 0])
upper_color = np.array([255, 255, 255])
  1. 将图片从BGR转换为HSV颜色空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
  1. 根据颜色区间获取目标物体的二值图像
mask = cv2.inRange(hsv, lower_color, upper_color)
  1. 对二值图像进行腐蚀和膨胀操作,去除噪声
kernel = np.ones((5, 5), np.uint8)
mask = cv2.erode(mask, kernel, iterations=1)
mask = cv2.dilate(mask, kernel, iterations=1)
  1. 对二值图像进行轮廓检测
contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  1. 遍历轮廓,找到目标物体的位置
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)
  1. 显示结果
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()
``
如何用python-opencv识别图片中多个物体的某一个物体的坐标

原文地址: http://www.cveoy.top/t/topic/gucW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录