Python OpenCV填充由红色框出的圆圈

问题描述 投票:0回答:1

enter image description here

我有上面的图像,我只想能够获得红色所概述的形状并将该形状中的所有颜色都着色为白色。我下面的代码片段读取图像,使用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值还是使用完全不同的方式?谢谢!

我目前正在收到类似的内容:

enter image description here

python opencv hsv
1个回答
0
投票

这应该使您开始遵循我的评论:

#!/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))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.