Python OpenCV填充红色轮廓的圆圈

Python OpenCV填充红色轮廓的圆圈,python,opencv,hsv,Python,Opencv,Hsv,我有上面的图像,我只想能够得到红色轮廓的形状,并将该形状中的所有东西都涂成白色。下面我的代码片段读取图像,使用HSV值尝试获取仅包含红色像素值的掩码,但由于某些原因,它无法工作。我没有得到一个完整的圆,只是在附近有一堆点。我是否使用了错误的HSV值 im = cv2.imread(img, cv2.IMREAD_UNCHANGED) hsv_im = cv2.cvtColor(im, cv2.COLOR_BGR2HSV) lower_red = np.array([0, 80, 80], np.

我有上面的图像,我只想能够得到红色轮廓的形状,并将该形状中的所有东西都涂成白色。下面我的代码片段读取图像,使用HSV值尝试获取仅包含红色像素值的掩码,但由于某些原因,它无法工作。我没有得到一个完整的圆,只是在附近有一堆点。我是否使用了错误的HSV值

im = cv2.imread(img, cv2.IMREAD_UNCHANGED)
hsv_im = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
lower_red = np.array([0, 80, 80], np.uint8)
upper_red = np.array([20, 255, 255], np.uint8)
frame_threshold_red = cv2.inRange(hsv_im, lower_red, upper_red)
要获取我的HSV值,我将执行以下操作:

red = np.uint8([[[0, 0, 224]]])
hsv_red = cv2.cvtColor(red,  cv2.COLOR_BGR2HSV) # 0, 255, 224
224是红色像素的值。我通过查看实际的矩阵值来检查

有人对我如何解决这个问题有什么建议吗?我应该修改HSV值还是使用完全不同的方法?谢谢

我现在得到的是这样的东西:


这应该让您开始了解我的评论:

#!/usr/bin/env python3

import cv2
import numpy as np

# Load image and convert to HSV
im = cv2.imread("blob.png", cv2.IMREAD_UNCHANGED)
HSV = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)

# Define lower and upper limits of "red"
redlo = np.array([0, 80, 80], np.uint8)
redhi = np.array([20, 255, 255], np.uint8)

# Mask red pixels
R = cv2.inRange(HSV, redlo, redhi)

# Calculate x,y coordinate of centre of red pixels
M = cv2.moments(R) 
cX = int(M["m10"] / M["m00"]) 
cY = int(M["m01"] / M["m00"]) 

# Flood fill with white starting from centroid
_, res, _, _ = cv2.floodFill(im,mask=None,seedPoint=(cX,cY),newVal=(255,255,255))

我想你需要一个白色的“泛光填充”,从红色圆圈内的一点开始@谢谢你的回复!但这需要我手动选择点如果它是圆形,你可以找到红色像素的质心,或者最左边和最右边红色像素的平均值,以及最上面和最下面红色像素的平均值,作为泛光填充的种子。如果它可能不是循环的,我们可能需要更仔细地思考。我的回答解决了你的问题吗?如果是这样,请考虑接受它作为您的答案-点击空心蜱/支票旁边的选票计数。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢@很抱歉耽搁了,但是非常感谢你的帮助!