如何将旋转的边界框创建为多边形
How to create rotated bounding box to an polygon shape
我尝试为下图中的黄色矩形创建一个边界框:original
我已经从一些教程中获得了代码:Code Tutorial
image = cv2.imread('Mask.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
plt.imshow(fixColor(blurred))
canny = cv2.Canny(blurred, 30, 600)
plt.imshow(fixColor(canny))
(cnts, _) = cv2.findContours(canny.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
coins = image.copy()
cv2.drawContours(coins, cnts, -1, (255, 0, 0), 2)
plt.imshow(fixColor(coins))
for cnt in cnts:
x,y,w,h = cv2.boundingRect(cnt)
cv2.rectangle(coins,(x,y),(x+w,y+h),(0,255,0),2)
在下图中你可以看到我的代码的输出:Output bounding box
它创建了多个边界框,一个用于整张图片,还有一些是随机的,我不确定为什么。我在想是不是图片中矩形不完整的问题?
也许有人知道我该如何修复它以只为黄色矩形创建一个 B-Box。
如果您查看您的 Canny 图像,您会看到黄色形状的边缘与图像的边界融合在一起,因此您将很难使用边缘检测方法(例如 Canny)来找到您的形状,因为它不是完全包含在图像中。
如果你不限制使用Canny,我会建议一个简单的HSV in range threshold,例如:
import numpy as np
import cv2
image = cv2.imread('image.png')
imagehsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower_yellow = np.array([20, 100, 100])
upper_yellow = np.array([30, 255, 255])
mask_yellow = cv2.inRange(imagehsv, lower_yellow, upper_yellow)
contours, hierarchy = cv2.findContours(mask_yellow, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(image, contours, -1, (0, 255, 0), 2, cv2.LINE_AA)
cv2.imshow("contours_yellow", image)
我尝试为下图中的黄色矩形创建一个边界框:original
我已经从一些教程中获得了代码:Code Tutorial
image = cv2.imread('Mask.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
plt.imshow(fixColor(blurred))
canny = cv2.Canny(blurred, 30, 600)
plt.imshow(fixColor(canny))
(cnts, _) = cv2.findContours(canny.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
coins = image.copy()
cv2.drawContours(coins, cnts, -1, (255, 0, 0), 2)
plt.imshow(fixColor(coins))
for cnt in cnts:
x,y,w,h = cv2.boundingRect(cnt)
cv2.rectangle(coins,(x,y),(x+w,y+h),(0,255,0),2)
在下图中你可以看到我的代码的输出:Output bounding box
它创建了多个边界框,一个用于整张图片,还有一些是随机的,我不确定为什么。我在想是不是图片中矩形不完整的问题?
也许有人知道我该如何修复它以只为黄色矩形创建一个 B-Box。
如果您查看您的 Canny 图像,您会看到黄色形状的边缘与图像的边界融合在一起,因此您将很难使用边缘检测方法(例如 Canny)来找到您的形状,因为它不是完全包含在图像中。
如果你不限制使用Canny,我会建议一个简单的HSV in range threshold,例如:
import numpy as np
import cv2
image = cv2.imread('image.png')
imagehsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower_yellow = np.array([20, 100, 100])
upper_yellow = np.array([30, 255, 255])
mask_yellow = cv2.inRange(imagehsv, lower_yellow, upper_yellow)
contours, hierarchy = cv2.findContours(mask_yellow, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(image, contours, -1, (0, 255, 0), 2, cv2.LINE_AA)
cv2.imshow("contours_yellow", image)