Python OpenCV 填充红色轮廓的圆圈

Python OpenCV Fill in circle outlined by red

我有上面的图片,我只想得到红色轮廓的形状,并将该形状中的所有内容都涂成白色。我下面的代码片段读取图像,使用 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))