2024-06-01 10:23:54 发布
网友
我有这张带有3个通道RGB的图像(VARI Index计算的结果),我想在植物周围绘制边界框(矩形),用绿色表示。使用OpenCV/python实现这一点的最佳和最简单的方法是什么
我想这对于OpenCV专家来说是一个简单的问题,但是我在网上找不到好的教程来为多个对象做这件事
我找到的最接近的教程是: determining-object-color-with-opencv
边界框的假设应该/可以是:
提前谢谢
你需要做HSV过滤
请参阅本页了解执行前2步的代码
https://pythonprogramming.net/color-filter-python-opencv-tutorial/
请参阅https://docs.opencv.org/master/d9/d61/tutorial_py_morphological_ops.html
import cv2 import numpy as np img = cv2.imread('8FGo1.jpg',1) hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) lower_red = np.array([45,100,50]) upper_red = np.array([75,255,255]) mask = cv2.inRange(hsv, lower_red, upper_red) kernel = np.ones((5,5),np.uint8) mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for contour in contours: x,y,w,h = cv2.boundingRect(contour) img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) cv2.imshow('img',img) #cv2.imshow('mask',mask)
输出
在无意中发现这个资源之后,我只是回答了我自己的问题:https://docs.opencv.org/3.4/da/d0c/tutorial_bounding_rects_circles.html
也许不是最好的答案,但它解决了我的问题
import cv2 import numpy as np image = cv2.imread('vari3.png') # https://www.pyimagesearch.com/2016/02/15/determining-object-color-with-opencv/ # https://docs.opencv.org/3.4/da/d0c/tutorial_bounding_rects_circles.html gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB) # mask: green is dominant. thresh = np.array((image.argmax(axis=-1) == 1) * 255, dtype=np.uint8) cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0] contours_poly = [None] * len(cnts) boundRect = [None] * len(cnts) for i, c in enumerate(cnts): contours_poly[i] = cv2.approxPolyDP(c, 3, True) boundRect[i] = cv2.boundingRect(contours_poly[i]) for i in range(len(cnts)): # cv2.drawContours(image, contours_poly, i, (0, 255, 0), thickness=2) pt1 = (int(boundRect[i][0]), int(boundRect[i][1])) pt2 = (int(boundRect[i][0] + boundRect[i][2]), int(boundRect[i][1] + boundRect[i][3])) if np.sqrt((pt2[1] - pt1[1]) * (pt2[0] - pt1[0])) < 30: continue cv2.rectangle(image, pt1, pt2, (0, 0, 0), 2) cv2.imwrite('result.png', image) cv2.imshow("Image", image) cv2.waitKey(0)
你需要做HSV过滤
请参阅本页了解执行前2步的代码
https://pythonprogramming.net/color-filter-python-opencv-tutorial/
请参阅https://docs.opencv.org/master/d9/d61/tutorial_py_morphological_ops.html
输出
在无意中发现这个资源之后,我只是回答了我自己的问题:https://docs.opencv.org/3.4/da/d0c/tutorial_bounding_rects_circles.html
也许不是最好的答案,但它解决了我的问题
相关问题 更多 >
编程相关推荐