我的图像上没有几个绿色条。但是其中之一很特别,因为它与蓝色形状相连。我想在特殊的绿色条周围使用minAreaRect()绘制一个边界框。
到目前为止,我已经可以使用minAreaRect()在所有绿色条周围绘制边界框。但是,为了过滤绿色条并仅采用特殊的条,我需要确定哪个框包含蓝色像素。
为此,我想检查每个框内的每个像素,以检查哪个包含蓝色像素。有什么方法可以识别边界框内像素的像素坐标。还是有更好的方法?
import cv2 as cv
import numpy as np
# Load the aerial image and convert to HSV colourspace
image = cv.imread("1.png")
image1 = image
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
# Define lower and uppper limits of the color blue
low_blue = np.array([94, 80, 2])
high_blue = np.array([126, 255, 255])
# Mask image to only select blues
mask1 = cv.inRange(hsv, low_blue, high_blue)
# Change image to green where we found blue
image[mask1 > 0] = (0, 130, 0)
blurred_frame = cv.GaussianBlur(image, (5, 5), 0)
hsv = cv.cvtColor(blurred_frame, cv.COLOR_BGR2HSV)
low_green = np.array([25, 52, 72])
high_green = np.array([102, 255, 255])
mask = cv.inRange(hsv, low_green, high_green)
_, contours, _ = cv.findContours(mask, cv.RETR_TREE, cv.CHAIN_APPROX_NONE)
image[mask1 > 0] = (255, 0, 0)
for contour in contours:
rect = cv.minAreaRect(contour)
box = cv.boxPoints(rect)
box = np.int0(box)
Cx = rect[0][0]
Cy = rect[0][1]
cv.drawContours(image, [box], 0, (0, 0, 255), 2)
cv.imshow("Frame", image)
cv.waitKey(0)
cv.destroyAllWindows()
这是输入图像
这是预期的输出(边框用紫色表示)
答案 0 :(得分:0)
此答案将查看图像中的所有绿色条。它会检查绿色条是否也包含蓝色。
saveToGoogleSheet () {
const scriptURL = 'https://script.google.com/macros/s/.../exec'
fetch(scriptURL, {method: 'POST', body: JSON.stringify(this.feedbackData)})
.then(response => console.log('Success!', response))
.catch(error => console.error('Error!', error.message))
}