如何使用 OpenCV 计算检测到的颜色对象
我正在尝试使用颜色来检测物体。下面是代码和图像:
import cv2
import numpy as np
img = cv2.imread('image2.jpeg')
img1 = img[157:498, 212:705]
hsv = cv2.cvtColor(img1, cv2.COLOR_BGR2HSV)
lower_bound = np.array([0, 20, 20])
upper_bound = np.array([20, 255, 255])
origMask = cv2.inRange(hsv, lower_bound, upper_bound)
kernel = np.ones((7, 7), np.uint8)
mask = cv2.morphologyEx(origMask, cv2.MORPH_CLOSE, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
cv2.imshow("Mask", mask)
cv2.imshow("Crop Image", img1)
cv2.imshow("Orig Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
所以在上面的代码中,我首先加载图像。然后将其裁剪到所需区域,然后执行 HSV 来查找橙色对象。
以下是原始图片:
下面是裁剪后的图像:
下面是 hsv 后的掩模图像:
我想知道我怎样才能计算物体的数量在掩模图像中。例如,在本例中为 3。计数后,如何在原始图像上的这些颜色对象上绘制边界框。
I am trying to detect objects using color. Below is the code and the image:
import cv2
import numpy as np
img = cv2.imread('image2.jpeg')
img1 = img[157:498, 212:705]
hsv = cv2.cvtColor(img1, cv2.COLOR_BGR2HSV)
lower_bound = np.array([0, 20, 20])
upper_bound = np.array([20, 255, 255])
origMask = cv2.inRange(hsv, lower_bound, upper_bound)
kernel = np.ones((7, 7), np.uint8)
mask = cv2.morphologyEx(origMask, cv2.MORPH_CLOSE, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
cv2.imshow("Mask", mask)
cv2.imshow("Crop Image", img1)
cv2.imshow("Orig Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
So in the above code, I am loading the image first. Then cropping it to a desired area and then performing the HSV to find orange color objects.
Below is the original image:
Below is the cropped image:
Below is the mask image after hsv:
I want to know how can I count the number of objects in the mask image. For example, in this case it is 3. And after counting it, how can I draw bounding box over these color objects on the original image.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用二元蒙版来获取图像的轮廓。然后,您可以计算属于每个轮廓的边界矩形。假设输入是您的二进制掩码,脚本应如下所示:
我正在创建一个名为
objectData
的列表。在这里,我存储对象的“id”(只是一个对象计数器)及其边界矩形。这是输出:You can use your binary mask to get the contours of the image. Then, you can compute the bounding rectangles belonging to each contour. Assume the input is your binary mask, the script should look like this:
I'm creating a list called
objectData
. Here, I'm storing the object's "id" (just an object counter) and its bounding rectangle. This is the output: